{"repo": "artcc/freelingo", "files": {"messages/en.json": {"971f98205441f1c948de59b548acdf078929e151": {"t": 1785745273.1009114, "n": 78464, "h": "2fd5653369fadd6a", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us via the contact form at freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us via the contact form at freelingo.app. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"freemiumTrialTitle\": \"Your free trial has started\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to all features for 7 days. No card required. Upgrade to Premium anytime from the dashboard.\",\n \"freemiumChatLabel\": \"AI tutor chat\",\n \"freemiumVoiceLabel\": \"Voice conversations\",\n \"freemiumListeningLabel\": \"Listening exercises\",\n \"freemiumReadingLabel\": \"Reading exercises\",\n \"goToDashboard\": \"Go to dashboard\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceling\": \"Canceling\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.27\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}"}, "fef25a604bab60de9e99ff4f5ff38bf0e988d624": {"t": 1785749546.432545, "n": 78464, "h": "2fd5653369fadd6a", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us via the contact form at freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us via the contact form at freelingo.app. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"freemiumTrialTitle\": \"Your free trial has started\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to all features for 7 days. No card required. Upgrade to Premium anytime from the dashboard.\",\n \"freemiumChatLabel\": \"AI tutor chat\",\n \"freemiumVoiceLabel\": \"Voice conversations\",\n \"freemiumListeningLabel\": \"Listening exercises\",\n \"freemiumReadingLabel\": \"Reading exercises\",\n \"goToDashboard\": \"Go to dashboard\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceling\": \"Canceling\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.27\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}"}, "f2eceecd45410092fb317ead6d1b5d0071042a52": {"t": 1785749550.3527815, "n": 78658, "h": "655cd461b5c681e9", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"freemiumTrialTitle\": \"Your free trial has started\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to all features for 7 days. No card required. Upgrade to Premium anytime from the dashboard.\",\n \"freemiumChatLabel\": \"AI tutor chat\",\n \"freemiumVoiceLabel\": \"Voice conversations\",\n \"freemiumListeningLabel\": \"Listening exercises\",\n \"freemiumReadingLabel\": \"Reading exercises\",\n \"goToDashboard\": \"Go to dashboard\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceling\": \"Canceling\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.26\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}"}, "1e8ddfdc904ccfdff96926cdb18123cb7aeaf631": {"t": 1785749552.1740472, "n": 78659, "h": "1c8f0cf2d5560331", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"freemiumTrialTitle\": \"Your free trial has started\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to all features for 7 days. No card required. Upgrade to Premium anytime from the dashboard.\",\n \"freemiumChatLabel\": \"AI tutor chat\",\n \"freemiumVoiceLabel\": \"Voice conversations\",\n \"freemiumListeningLabel\": \"Listening exercises\",\n \"freemiumReadingLabel\": \"Reading exercises\",\n \"goToDashboard\": \"Go to dashboard\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceling\": \"Canceling\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "70294dcef45ed11471317dabb8d84ca897cbeb09": {"t": 1785749553.807156, "n": 78702, "h": "b148b16104deb8d8", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"freemiumTrialTitle\": \"Your free trial has started\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to all features for 7 days — no card required. Upgrade to Premium anytime from the dashboard.\",\n \"freemiumChatLabel\": \"AI tutor chat\",\n \"freemiumVoiceLabel\": \"Voice conversations\",\n \"freemiumListeningLabel\": \"Listening exercises\",\n \"freemiumReadingLabel\": \"Reading exercises\",\n \"goToDashboard\": \"Go to dashboard\",\n \"upgradeLater\": \"Upgrade to Premium\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceling\": \"Canceling\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "0d6ad1821bcc89a6c6a70efa15344b821d8799bc": {"t": 1785749556.6586945, "n": 78225, "h": "2e5b814b1c189ca0", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceling\": \"Canceling\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "d8820fe857733e2dbd0d23e274a3d8d917e4367c": {"t": 1785749558.4522798, "n": 78189, "h": "8e8b1a80a49d01ab", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Chat with tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New\",\n \"toggleSidebarShow\": \"Show chats\",\n \"toggleSidebarHide\": \"Hide chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "3065af1846e36fa2534543c08aaed7ba654d353e": {"t": 1785749559.8684845, "n": 78106, "h": "52a2b8a4123ab8a6", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Unlimited access — no daily or weekly limits\",\n \"feature2\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\",\n \"l1\": \"AI tutor chat\",\n \"l2\": \"Voice conversations\",\n \"l3\": \"Listening exercises\",\n \"l4\": \"Reading exercises\",\n \"l5\": \"7-day full access trial\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"7-day full trial, then free with daily and weekly limits\",\n \"planFreeCta\": \"Start\",\n \"limitedLabel\": \"Limited\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "ebf966c2a4c19f294d1727adf4f74e1a26da7e4f": {"t": 1785749561.459615, "n": 77984, "h": "6cf2c8cf49389d1b", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"freemiumVoiceRemaining\": \"Free voice: {remaining}/{limit} min this week\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "8568bb1c72cb7373bec4b9ac11f0a7ac6d71d2b6": {"t": 1785749562.8613293, "n": 77905, "h": "74ae6a41d0c9dc5f", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team with a free plan and paid subscriptions. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team offers a free plan with usage limits and paid subscriptions for unlimited access, available on a monthly or yearly basis. The free plan includes a 7-day full-access trial (no payment method required) and thereafter limited daily quotas for lessons and AI chat, plus weekly quotas for listening exercises, reading exercises, and voice conversations. Paid subscriptions remove all usage limits on these features. In the hosted service your data is stored on servers operated by the FreeLingo team. Current usage limits for your account are available on your dashboard.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"The free plan includes limited access to AI-powered features with a 7-day full-access trial for new users (no payment method required). Paid subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers to a paid plan receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"freemiumTrialDesc\": \"Enjoy unlimited access to chat, voice, listening and reading. Try everything Premium for free.\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallLessonsTitle\": \"Complete unlimited lessons\",\n \"paywallLessonsDesc\": \"Grammar, vocabulary, reading and writing — finish as many lessons as you want every day.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lessons\",\n \"listeningLabel\": \"Listening\",\n \"readingLabel\": \"Reading\",\n \"voiceLabel\": \"Voice (min)\",\n \"freeLimit\": \"Get Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# day of free trial} other {# days of free trial}}\",\n \"trialUnlimited\": \"Unlimited access\",\n \"requiresSubscription\": \"Premium only\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Try everything for free\",\n \"desc\": \"You can now chat with Lingu, practise listening and reading, and try voice conversations without entering any payment details. Start with a free trial, then keep using every feature with daily and weekly practice limits. Upgrade anytime from the dashboard.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "0904e8a0ea95d836f14b581eb25c06c6bd1bff57": {"t": 1785749564.6437984, "n": 76894, "h": "79d6df3c077b945e", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.24\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Unread feedback notifications\",\n \"desc\": \"Feedback now shows a small unread counter in the sidebar, so you can spot new suggestions, bug reports, and replies without extra emails. Opening a feedback thread marks just that thread as read.\"\n },\n \"entry2\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry3\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "cccab4d2548f694eb31638eac626ba0aa6df3e3f": {"t": 1785749566.0571609, "n": 76894, "h": "31ed4ed070a9dc0a", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Unread feedback notifications\",\n \"desc\": \"Feedback now shows a small unread counter in the sidebar, so you can spot new suggestions, bug reports, and replies without extra emails. Opening a feedback thread marks just that thread as read.\"\n },\n \"entry2\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry3\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "3b84164d91d4640be5e0e01f3f356f20d8b0c65e": {"t": 1785749567.5762904, "n": 76894, "h": "df1679b1fb7af4e6", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"system\": \"System\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Unread feedback notifications\",\n \"desc\": \"Feedback now shows a small unread counter in the sidebar, so you can spot new suggestions, bug reports, and replies without extra emails. Opening a feedback thread marks just that thread as read.\"\n },\n \"entry2\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry3\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "ec43166c2232a67e76c890e328ae1ec47eaa6a02": {"t": 1785749569.1251614, "n": 76870, "h": "3c499a2c35607642", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Unread feedback notifications\",\n \"desc\": \"Feedback now shows a small unread counter in the sidebar, so you can spot new suggestions, bug reports, and replies without extra emails. Opening a feedback thread marks just that thread as read.\"\n },\n \"entry2\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry3\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "c84f9a5120125194068516d71aabf9519eff65e9": {"t": 1785749570.5179944, "n": 76870, "h": "1484017d377cdb06", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.22\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Unread feedback notifications\",\n \"desc\": \"Feedback now shows a small unread counter in the sidebar, so you can spot new suggestions, bug reports, and replies without extra emails. Opening a feedback thread marks just that thread as read.\"\n },\n \"entry2\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry3\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"unread\": \"Unread\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "36048aeecf912987df36d7b254d1da1e4395e742": {"t": 1785749572.0606792, "n": 76846, "h": "331f31f072138a95", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.21\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Unread feedback notifications\",\n \"desc\": \"Feedback now shows a small unread counter in the sidebar, so you can spot new suggestions, bug reports, and replies without extra emails. Opening a feedback thread marks just that thread as read.\"\n },\n \"entry2\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry3\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "8c3d07b127cbbfa151f285b9f0231d8c268b0f80": {"t": 1785749573.5996583, "n": 76563, "h": "bbd1ee65361debb5", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.20\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry2\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "8e7d77f0369a67a972b41d2156c3cad3a0427256": {"t": 1785749574.9798136, "n": 77361, "h": "383f7508b3f990f2", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.20\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Free voice trial after assessment\",\n \"desc\": \"After creating your study plan, you can try a real-time voice conversation with Lingu for 5 minutes, free. When the demo ends, Premium unlocks full voice practice and the other guided modes.\"\n },\n \"entry2\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry3\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry4\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry5\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "e17ab023ab6e65310c9e7d9ccf51ac7555e226c4": {"t": 1785749576.5968704, "n": 76502, "h": "a75e1f6bef6eb9c9", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_resources\": \"What are Resources?\",\n \"a_resources\": \"The Resources section brings together reference material that is independent from your Study Plan: grammar by level, vocabulary sets, and useful phrases. You can use it anytime to review, look up explanations, or expand your vocabulary without waiting for a daily lesson.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "bba0316c5c98a99dac52653c404635a16445d58f": {"t": 1785749578.1689749, "n": 76113, "h": "ce4529f071375b45", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusUnpaid\": \"Unpaid\",\n \"statusPaused\": \"Paused\",\n \"statusIncomplete\": \"Payment pending\",\n \"statusIncompleteExpired\": \"Payment expired\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "462756c9f11407bfbf9cdee76297b1d2004e86d0": {"t": 1785749579.7567513, "n": 75960, "h": "946b5a365903ba99", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successCheckingLabel\": \"Confirming subscription\",\n \"successCheckingTitle\": \"Checking your subscription\",\n \"successCheckingDesc\": \"This usually takes a few seconds.\",\n \"successPendingLabel\": \"Almost ready\",\n \"successPendingTitle\": \"Your subscription is being confirmed\",\n \"successPendingDesc\": \"Your Premium access should be available shortly. If it is not, check your billing settings.\",\n \"successErrorLabel\": \"Confirmation pending\",\n \"successErrorTitle\": \"We could not verify your subscription yet\",\n \"successErrorDesc\": \"Go to the dashboard and refresh in a moment, or check your billing settings.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "0fbf6f5f18c82899aff8ac2c064ce7aea23cf877": {"t": 1785749581.2902858, "n": 75329, "h": "d035e9549bba52e3", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\",\n \"premiumBannerPastDueTitle\": \"Payment pending\",\n \"premiumBannerPastDueDesc\": \"Update your payment method to restore Premium access to chat, voice conversation, reading and listening.\",\n \"premiumBannerPastDueCta\": \"Restore Premium\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"updatePayment\": \"Update payment\",\n \"pastDueTitle\": \"Payment pending\",\n \"pastDueDesc\": \"Update your payment method to restore Premium access.\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "24a06f5e50b0db5de9ada184b37575ef436b7304": {"t": 1785749582.9147263, "n": 74933, "h": "09cc88422fcb8a1e", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"Invite Link\",\n \"createUserBtn\": \"Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.18\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "853f31e8f535c69e56e9b5f4a354706d0daeb0a2": {"t": 1785749584.4537632, "n": 74948, "h": "c731f470d89bd057", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"regenerateExercise\": \"Regenerate exercise\",\n \"regeneratingExercise\": \"Regenerating...\",\n \"regenerateError\": \"Could not regenerate the exercise. Try again.\",\n \"regenerateNotNeeded\": \"This exercise does not need regeneration.\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.18\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "5564d600b59d38e2410ee739d678073083a2080f": {"t": 1785749585.8295245, "n": 74707, "h": "d16b6ff580aecdb0", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.17\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}"}, "040d66f05778ba7c881763af0dd81d5d01ba15a6": {"t": 1785749587.821639, "n": 74708, "h": "4099feb5ef1a40fb", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerDescTrialUsed\": \"Activate Premium to unlock text chat with Lingu, voice conversation, reading and listening.\",\n \"premiumBannerCta\": \"Free trial\",\n \"premiumBannerCtaTrialUsed\": \"View plans\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialTitleTrialUsed\": \"Activate FreeLingo Premium\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialDescTrialUsed\": \"Choose a plan to unlock Lingu, voice practice, listening and reading.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaMonthlyTrialUsed\": \"Flexible monthly · €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialCtaYearlyTrialUsed\": \"Best value · €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialNoChargeTrialUsed\": \"Review the amount before you subscribe. Cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallDescTrialUsed\": \"Unlock every Premium practice mode and review the amount before confirming.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallNoChargeTrialUsed\": \"Secure payment · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"pricingDescTrialUsed\": \"Choose monthly or yearly · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Start free trial\",\n \"ctaRegisterTrialUsed\": \"Choose plan\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge was made in this session · Choose a plan anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "be4bf883c5e7363d8ff530f1ed41f610dabe0bf4": {"t": 1785749589.2842546, "n": 74012, "h": "deed853637c548b7", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerCta\": \"Free trial\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingLabel\": \"Pricing\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"ctaStart\": \"Start {days}-day free trial\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"ctaRegister\": \"Start free trial\",\n \"everythingFree\": \"Everything included in the free plan, plus:\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"Your free trial is still available\",\n \"canceledDesc\": \"No charge was made. Your progress is safe, and you can choose a plan later from your settings.\",\n \"canceledCtaRetry\": \"Retry free trial · {plan}\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"View plans\",\n \"canceledNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreePriceLabel\": \"Free\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "3362c05bbad238dae72a78b4e5b0643244a1227d": {"t": 1785749590.866156, "n": 74046, "h": "ec1bc8f3cc5e8637", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Unlock conversation, listening and reading\",\n \"premiumBannerDesc\": \"Start with a free trial and practise with Lingu by text, voice and exercises adapted to your level.\",\n \"premiumBannerCta\": \"Free trial\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialTitle\": \"Start with {days} days free\",\n \"trialDesc\": \"Get full access to Lingu, voice practice, listening and reading before your first payment.\",\n \"trialCtaMonthly\": \"Try free, then €{price}/month\",\n \"trialCtaYearly\": \"Try free, then €{price}/year · 2 months free\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"No charge today. Card required, cancel anytime.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial and unlock every Premium practice mode before your first payment.\",\n \"paywallChatTitle\": \"Practise with Lingu without limits\",\n \"paywallChatDesc\": \"Ask questions, get corrections and keep natural text conversations with your AI tutor.\",\n \"paywallConversationTitle\": \"Speak in real time with Lingu\",\n \"paywallConversationDesc\": \"Practise spoken conversation with transcription, fast replies and feedback to build fluency.\",\n \"paywallListeningTitle\": \"Train your ear at your level\",\n \"paywallListeningDesc\": \"Listen to AI-generated exercises adapted to your progress and check your comprehension immediately.\",\n \"paywallReadingTitle\": \"Read texts adapted to your progress\",\n \"paywallReadingDesc\": \"Improve reading comprehension with level-matched texts, questions and instant feedback.\",\n \"paywallNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"paywallSkip\": \"Not now\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"Flexible monthly · €{price}/month →\",\n \"planYearly\": \"Best value · €{price}/year · 2 months free →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingLabel\": \"Pricing\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"{days} days free · No charge today · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"ctaStart\": \"Start {days}-day free trial\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"Free trial\",\n \"ctaRegister\": \"Start free trial\",\n \"everythingFree\": \"Everything included in the free plan, plus:\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"Your free trial is still available\",\n \"canceledDesc\": \"No charge was made. You can retry Checkout and keep access to Lingu, voice, listening and reading before your first payment.\",\n \"canceledCtaRetry\": \"Retry free trial · {plan}\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"Go to settings\",\n \"canceledNoCharge\": \"No charge today · Card required · Cancel anytime\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreePriceLabel\": \"Free\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "172e172291f0e761118e96140faa58571f82969a": {"t": 1785749592.281212, "n": 73011, "h": "11bba4b29414a4ab", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"cardProfileAccess\": \"Profile and access\",\n \"cardSessionSecurity\": \"Session and security\",\n \"cardTheme\": \"Theme\",\n \"cardConversationTiming\": \"Conversation timing\",\n \"cardTutorVoice\": \"Tutor voice\",\n \"cardCurrentUsage\": \"Current usage\",\n \"cardProductReview\": \"Product review\",\n \"cardCreatedBy\": \"Created by\",\n \"cardLegalDocuments\": \"Legal documents\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Practise more with FreeLingo Premium\",\n \"premiumBannerDesc\": \"Access Reading, Listening, chat with Lingu, and voice conversation.\",\n \"premiumBannerCta\": \"View plans →\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialTitle\": \"{days} days of full access\",\n \"trialDesc\": \"AI chat tutor, voice conversations, listening and reading exercises. No commitment, cancel anytime.\",\n \"trialCtaMonthly\": \"Start at €{price}/month\",\n \"trialCtaYearly\": \"Start at €{price}/year\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"Card required. No charge until trial ends.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial, no charge today. Cancel anytime.\",\n \"paywallNoCharge\": \"Card required · No charge until trial ends · Cancel anytime\",\n \"paywallSkip\": \"Continue with free features\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"— Start for €{price}/month →\",\n \"planYearly\": \"— Start for €{price}/year →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingLabel\": \"Pricing\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"7 days free with your subscription · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"ctaStart\": \"Start {days}-day free trial\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"7 days free\",\n \"ctaRegister\": \"Get started\",\n \"everythingFree\": \"Everything included in the free plan, plus:\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"You can subscribe any time. Your progress and settings are intact.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"Go to settings\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreePriceLabel\": \"Free\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "9799a499a3e4f9ece459394c1e49459d081fb57b": {"t": 1785749593.6738605, "n": 72633, "h": "c96b398b3298fa7c", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Practise more with FreeLingo Premium\",\n \"premiumBannerDesc\": \"Access Reading, Listening, chat with Lingu, and voice conversation.\",\n \"premiumBannerCta\": \"View plans →\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"hint\": \"Hint\",\n \"showNativeHint\": \"Show hint in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialTitle\": \"{days} days of full access\",\n \"trialDesc\": \"AI chat tutor, voice conversations, listening and reading exercises. No commitment, cancel anytime.\",\n \"trialCtaMonthly\": \"Start at €{price}/month\",\n \"trialCtaYearly\": \"Start at €{price}/year\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"Card required. No charge until trial ends.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial, no charge today. Cancel anytime.\",\n \"paywallNoCharge\": \"Card required · No charge until trial ends · Cancel anytime\",\n \"paywallSkip\": \"Continue with free features\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"— Start for €{price}/month →\",\n \"planYearly\": \"— Start for €{price}/year →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingLabel\": \"Pricing\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"7 days free with your subscription · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"ctaStart\": \"Start {days}-day free trial\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"7 days free\",\n \"ctaRegister\": \"Get started\",\n \"everythingFree\": \"Everything included in the free plan, plus:\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"You can subscribe any time. Your progress and settings are intact.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"Go to settings\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreePriceLabel\": \"Free\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}, "f922bb72c8274ae00cbc24d6b78011b6e52eb03e": {"t": 1785749595.3124945, "n": 72575, "h": "c8b6c4455484f199", "c": "{\n \"landing\": {\n \"hero\": \"Learn languages with a real voice conversation partner\",\n \"heroSub\": \"Talk. Listen. Improve.\",\n \"signIn\": \"Sign in\",\n \"dashboard\": \"Continue\",\n \"feature1Title\": \"Learning Plan\",\n \"feature1Desc\": \"Level assessment + weekly plan from A1 to C2. Lessons unlocked in order, at your own pace.\",\n \"feature2Title\": \"AI Chat Tutor\",\n \"feature2Desc\": \"Practice with lessons, exercises and flashcards guided by your tutor. Feedback at every step.\",\n \"feature3Title\": \"Voice Conversation\",\n \"feature3Desc\": \"Talk to your tutor in real time. Voice-activated, instant response, no turn-taking.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"AI-generated exercises at your CEFR level. Listen to a passage, answer 5 comprehension questions and unlock the transcript — or read a text and answer questions directly. New exercises on demand.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Vocabulary review with spaced repetition. The SM-2 algorithm schedules each card at the optimal moment to maximise long-term retention.\",\n \"feature6Title\": \"Progress & Streaks\",\n \"feature6Desc\": \"XP, daily streaks, skill scores and unit competencies. Track your growth week by week and test your level at the end of each CEFR stage.\",\n \"footer\": \"Open source · Self-host free or subscribe to the hosted service\",\n \"navFeatures\": \"Features\",\n \"navReviews\": \"Reviews\",\n \"navPricing\": \"Pricing\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"How it works\",\n \"faqTitle\": \"Frequently Asked Questions\",\n \"terms\": \"Terms\",\n \"privacy\": \"Privacy\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"About me\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Product\",\n \"footerLegal\": \"Legal\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Loading...\",\n \"error\": \"Error\",\n \"save\": \"Save changes\",\n \"saving\": \"Saving...\",\n \"cancel\": \"Cancel\",\n \"back\": \"Back\",\n \"done\": \"Done\",\n \"next\": \"Next\",\n \"submit\": \"Submit\",\n \"start\": \"Start\",\n \"retry\": \"Retry\",\n \"or\": \"or\",\n \"appName\": \"FreeLingo\",\n \"days\": \"days\",\n \"logout\": \"Logout\",\n \"logoutConfirmTitle\": \"Log Out\",\n \"logoutConfirmMessage\": \"Are you sure you want to log out?\",\n \"initializing\": \"Initializing...\",\n \"clearFilters\": \"Clear filters\",\n \"all\": \"All\",\n \"score\": \"Score\",\n \"complete\": \"Complete\",\n \"checking\": \"Checking...\",\n \"backToDashboard\": \"Back to Dashboard\",\n \"tagline\": \"AI language learning\",\n \"close\": \"Close\",\n \"verifyEmailBanner\": \"Please verify your email address to complete your account setup.\",\n \"verifyEmailSent\": \"Email sent. Check your inbox.\",\n \"resendVerification\": \"Resend verification email\",\n \"saveWord\": \"Save\",\n \"wordSaved\": \"Saved\",\n \"wordSaveError\": \"Something went wrong\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\",\n \"noActivePlan\": \"No active study plan found\",\n \"removeLanguageConfirmTitle\": \"Remove language\",\n \"removeLanguageConfirmMessage\": \"All data for this language (study plan, progress, flashcards, conversations, and memories) will be permanently deleted. This action cannot be undone.\",\n \"removeLanguageConfirmLabel\": \"Remove\",\n \"nativeHelpTitle\": \"Help in {language}\",\n \"nativeHelpLoading\": \"Preparing help in {language}...\",\n \"nativeHelpShow\": \"Show help in {language}\",\n \"nativeHelpKeyPoints\": \"Key points\",\n \"nativeHelpCommonTraps\": \"Common traps\",\n \"nativeHelpMiniGlossary\": \"Mini glossary\",\n \"nativeHelpUsageTips\": \"Usage tips\",\n \"nativeHelpRegisterNotes\": \"Register\",\n \"nativeHelpPhraseNotes\": \"Phrase notes\",\n \"nativeHelpStudyTips\": \"Study tips\",\n \"nativeHelpWordNotes\": \"Word notes\",\n \"nativeHelpPractice\": \"Practice\"\n },\n \"nav\": {\n \"home\": \"Home\",\n \"myPlan\": \"My Plan\",\n \"progress\": \"Progress\",\n \"flashcards\": \"Flashcards\",\n \"tutor\": \"Tutor\",\n \"assessment\": \"Assessment\",\n \"resources\": \"Resources\",\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"phrasebook\": \"Phrasebook\",\n \"settings\": \"Settings\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"switchLanguage\": \"Switch language\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Sign in\",\n \"subtitle\": \"Welcome back\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign in\",\n \"noAccount\": \"Don't have an account?\",\n \"register\": \"Register\",\n \"error\": \"Invalid email or password\",\n \"emailRequired\": \"Please enter your email\",\n \"passwordRequired\": \"Please enter your password\",\n \"loginFailed\": \"Login failed\",\n \"signingIn\": \"Signing in...\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"accountCreated\": \"Account created. You can now sign in\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"register\": {\n \"title\": \"Create account\",\n \"subtitle\": \"Start learning\",\n \"username\": \"Username\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"displayName\": \"Display name\",\n \"nativeLanguage\": \"Native language\",\n \"inviteToken\": \"Invite code\",\n \"inviteTokenPlaceholder\": \"Enter invite code\",\n \"submit\": \"Create account\",\n \"hasAccount\": \"Already have an account?\",\n \"login\": \"Sign in\",\n \"registrationClosed\": \"Registration is closed. You need an invite code.\",\n \"error\": \"Registration failed\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"confirmPassword\": \"Confirm Password\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"displayNamePlaceholder\": \"Same as username if empty\",\n \"inviteActive\": \"Invite active\",\n \"creatingAccount\": \"Creating...\",\n \"invalidEmail\": \"Please enter a valid email address\",\n \"usernameTaken\": \"Username already taken\",\n \"emailTaken\": \"Email address already registered\",\n \"invalidInvite\": \"Invalid or expired invite code\",\n \"termsAccept\": \"I have read and accept the\",\n \"termsLink\": \"Terms of Service\",\n \"andWord\": \"and the\",\n \"privacyLink\": \"Privacy Policy\",\n \"termsRequired\": \"You must accept the terms to continue\",\n \"invalidPassword\": \"Password must be 10-25 characters and include at least one uppercase letter, one number, and one symbol\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\"\n },\n \"verifyEmail\": {\n \"title\": \"Email verification\",\n \"loading\": \"Verifying...\",\n \"success\": \"Your email has been verified. You can now sign in.\",\n \"error\": \"Invalid or expired verification link. Please request a new one from your account.\",\n \"goToLogin\": \"Go to login\"\n },\n \"forgotPassword\": {\n \"title\": \"Forgot password\",\n \"description\": \"Enter the email address associated with your account and we will send you a reset link.\",\n \"emailPlaceholder\": \"your@email.com\",\n \"submit\": \"Send reset link\",\n \"sending\": \"Sending...\",\n \"sent\": \"If that email is registered, a reset link has been sent. Check your inbox.\",\n \"backToLogin\": \"Back to login\",\n \"error\": \"Something went wrong. Please try again.\"\n },\n \"resetPassword\": {\n \"title\": \"Reset password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"submit\": \"Set new password\",\n \"saving\": \"Saving...\",\n \"success\": \"Password updated. Redirecting to login...\",\n \"mismatch\": \"Passwords do not match\",\n \"tooShort\": \"Password must be at least 8 characters\",\n \"missingToken\": \"Invalid reset link. Please request a new password reset.\",\n \"error\": \"Invalid or expired reset link\",\n \"backToLogin\": \"Back to login\"\n }\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"sectionAccount\": \"Account\",\n \"sectionProfile\": \"Profile\",\n \"avatarChange\": \"Change photo\",\n \"avatarRemove\": \"Remove\",\n \"avatarUploading\": \"Uploading...\",\n \"avatarTypeError\": \"Only JPEG and PNG images are allowed\",\n \"avatarSizeError\": \"Image too large (max 2 MB)\",\n \"displayName\": \"Display Name\",\n \"email\": \"Email\",\n \"nativeLanguage\": \"Native Language\",\n \"uiLocale\": \"Interface Language\",\n \"uiLocaleHint\": \"Changes the language of menus and buttons. Requires page reload.\",\n \"newPassword\": \"New Password\",\n \"newPasswordPlaceholder\": \"Leave empty to keep\",\n \"confirmPassword\": \"Confirm Password\",\n \"confirmPasswordPlaceholder\": \"Repeat new password\",\n \"bio\": \"About You (AI Context)\",\n \"bioPlaceholder\": \"e.g. I'm a software developer who travels frequently for work...\",\n \"bioHint\": \"The AI tutor will use this to personalize conversations.\",\n \"saveChanges\": \"Save Changes\",\n \"saving\": \"Saving...\",\n \"saved\": \"Profile updated.\",\n \"passwordMismatch\": \"Passwords do not match\",\n \"saveFailed\": \"Failed to save\",\n \"logout\": \"Logout\",\n \"sectionAppearance\": \"Appearance\",\n \"theme\": \"Theme\",\n \"darkActive\": \"Dark mode active\",\n \"lightActive\": \"Light mode active\",\n \"systemActive\": \"Automatic (system)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Dark\",\n \"themeLight\": \"Light\",\n \"switchToLight\": \"Switch to Light\",\n \"switchToDark\": \"Switch to Dark\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Max Session Duration\",\n \"conversationInactivityTimeout\": \"Inactivity Timeout\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Save\",\n \"conversationSaved\": \"Conversation settings saved.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Terms of Service\",\n \"privacyPolicy\": \"Privacy Policy\",\n \"sectionAuthor\": \"Author\",\n \"authorDescription\": \"Built by Arturo Carretero Calvo\",\n \"websiteLink\": \"Website\",\n \"githubProfile\": \"GitHub profile\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Delete Account\",\n \"deleteAccountTitle\": \"Delete Account\",\n \"deleteAccountMessage\": \"This will permanently delete your account and all your data. This action cannot be undone.\",\n \"deleteAccountConfirm\": \"Delete Account\",\n \"sectionUsageLimits\": \"Usage Limits\",\n \"sectionVoice\": \"Voice\",\n \"voiceHint\": \"Select your preferred AI voice from the dropdown, then click play to preview it.\",\n \"voicePlay\": \"Play\",\n \"voiceStop\": \"Stop\",\n \"quotaSessions\": \"Sessions / week\",\n \"quotaMinutesDay\": \"Minutes / day\",\n \"quotaMinutesWeek\": \"Minutes / week\",\n \"quotaTokens\": \"Tokens / month\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaLoading\": \"Loading...\",\n \"quotaHint\": \"Usage resets weekly (sessions & minutes) and monthly (tokens).\",\n \"sectionMemory\": \"Memory\",\n \"memoryEmpty\": \"No memories saved yet. The AI will remember important details about you during conversations and save them here.\",\n \"memoryClearAll\": \"Clear All Memories\",\n \"memoryClearAllTitle\": \"Clear All Memories\",\n \"memoryClearAllMessage\": \"This will permanently delete all saved memories. This action cannot be undone.\",\n \"memoryClearAllConfirm\": \"Clear All\",\n \"memoryManage\": \"Manage memories\",\n \"sectionLanguages\": \"Languages\",\n \"languagesManage\": \"My languages\",\n \"sectionReview\": \"Review\",\n \"reviewDescription\": \"Share your experience with FreeLingo. If you edit an already approved review, it will go back to review before appearing publicly.\",\n \"reviewPending\": \"Pending approval\",\n \"reviewUpdate\": \"Update\",\n \"reviewSaved\": \"Review saved.\",\n \"reviewDelete\": \"Delete review\",\n \"reviewDeleteTitle\": \"Delete review\",\n \"reviewDeleteMessage\": \"Do you want to delete your review? This action cannot be undone.\",\n \"reviewDeleteConfirm\": \"Delete\",\n \"reviewDeleted\": \"Review deleted.\",\n \"reviewDeleteError\": \"We could not delete your review. Please try again.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Terms of Service\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. About FreeLingo\",\n \"s1Body\": \"FreeLingo is an open-source AI-powered language learning platform available in two modes: (1) self-hosted, where you run it on your own infrastructure at no cost, and (2) as a hosted service operated by the FreeLingo team, available via paid subscription. By using this service in either mode, you agree to these Terms of Service.\",\n \"s2Title\": \"2. Acceptable Use\",\n \"s2Intro\": \"You may use FreeLingo solely for personal language learning purposes. You agree not to:\",\n \"s2i1\": \"Attempt to gain unauthorized access to any part of the system.\",\n \"s2i2\": \"Upload malicious content or attempt to disrupt the service.\",\n \"s2i3\": \"Share your account credentials with third parties.\",\n \"s2i4\": \"Use automated scripts or bots to abuse the AI tutoring features.\",\n \"s3Title\": \"3. User Accounts\",\n \"s3Body\": \"You must be at least 16 years old to create an account and use FreeLingo. By registering, you confirm that you meet this age requirement. If we become aware that an account belongs to a person under 16, we will delete it and all associated data without notice. You are responsible for maintaining the confidentiality of your credentials and for all activity under your account. The operator of the instance — yourself for self-hosted deployments, or the FreeLingo team for the hosted service — may suspend or terminate accounts that violate these terms.\",\n \"s4Title\": \"4. Content & AI Interactions\",\n \"s4Body\": \"Conversations with the AI tutor are stored in the database for learning continuity. In the hosted service, AI chat and voice features are processed via OpenAI's API and your content is subject to OpenAI's usage policies. The AI may produce inaccurate responses — always apply your own judgement. FreeLingo is not responsible for content generated by underlying language models. The content generated by the AI tutor (exercises, corrections, explanations, and other materials) belongs to you for your personal use. FreeLingo does not claim ownership over your conversations or the content generated from them.\",\n \"s5Title\": \"5. Service Modalities\",\n \"s5Body\": \"Self-hosted deployments are free and the operator retains full control over their data and infrastructure. The hosted service operated by the FreeLingo team is provided via paid subscription, available on a monthly or yearly basis. In the hosted service your data is stored on servers operated by the FreeLingo team. The hosted service applies usage limits to AI tutoring features; your current usage is available in account settings.\",\n \"s6Title\": \"6. Subscription & Billing\",\n \"s6Body\": \"Subscriptions are available on a monthly or yearly billing cycle and renew automatically unless cancelled before the renewal date. New subscribers receive a free trial period (payment details required to start; no charge is made until the trial ends). You may cancel at any time from your account settings, effective at the end of the current billing period. If you cancel within 14 days of your first subscription payment and have not meaningfully used the service, you may request a full refund under EU consumer law. No partial refunds are issued for unused time beyond this statutory right. Current subscription prices are displayed at checkout.\",\n \"s7Title\": \"7. Availability\",\n \"s7Body\": \"This service is provided without uptime guarantees. The operator may suspend or discontinue the service for maintenance, updates, or any other reason, with reasonable notice where possible.\",\n \"s8Title\": \"8. Limitation of Liability\",\n \"s8Body\": \"FreeLingo and its contributors are not liable for any direct, indirect, incidental or consequential damages arising from your use of, or inability to use, this service. To the maximum extent permitted by applicable law, total liability shall not exceed the amount paid by you in the three months preceding the claim. You agree to indemnify and hold harmless FreeLingo and its contributors from any third-party claims, damages, or expenses arising from your use of the service in violation of these terms.\",\n \"s9Title\": \"9. Governing Law\",\n \"s9Body\": \"These terms are governed by the laws of Spain. Any disputes arising from these terms shall be subject to the exclusive jurisdiction of the courts of Spain, unless mandatory consumer protection law in your country of residence provides otherwise.\",\n \"s10Title\": \"10. Changes to These Terms\",\n \"s10Body\": \"These terms may be updated at any time. We will notify users of material changes via the service interface. Continued use of the service after changes constitutes acceptance of the revised terms.\",\n \"s11Title\": \"11. Severability\",\n \"s11Body\": \"If any provision of these terms is found to be invalid or unenforceable by a court of competent jurisdiction, that provision will be limited or eliminated to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkPrivacy\": \"Privacy Policy\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\",\n \"linkContact\": \"For questions about these terms, contact us at contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Privacy Policy\",\n \"updated\": \"Last updated: June 2026\",\n \"s1Title\": \"1. Overview\",\n \"s1Body\": \"FreeLingo is available as a self-hosted application and as a hosted service. For self-hosted deployments, all data is stored exclusively on the operator's server and the FreeLingo project authors have no access to it. For the hosted service, the FreeLingo team acts as the data controller and this policy describes how your personal data is collected, used, and protected.\",\n \"s2Title\": \"2. Data We Collect\",\n \"s2Intro\": \"FreeLingo is not directed at children under 16. We do not knowingly collect personal data from anyone under 16 years of age. If you are under 16, do not create an account or provide any personal data. When you create an account and use FreeLingo, the following data is stored:\",\n \"s2i1\": \"Username, display name, and email address.\",\n \"s2i2\": \"Hashed password (bcrypt — your plain-text password is never stored).\",\n \"s2i3\": \"Native language preference and learning settings.\",\n \"s2i4\": \"Optional profile avatar image.\",\n \"s2i5\": \"Chat and conversation history with the AI tutor.\",\n \"s2i6\": \"Flashcard decks, study progress, and spaced-repetition data.\",\n \"s2i7\": \"Assessment results and curriculum progress.\",\n \"s2i8\": \"Subscription status, plan type, and Stripe customer identifier (for paid service subscribers).\",\n \"s2i9\": \"Memories and preferences the AI tutor learns about you during conversations to personalize future interactions.\",\n \"s2i10\": \"Feature requests, bug reports, comments, and votes you submit through the feedback board. Only your username is shown publicly; all users can see published suggestions and reports.\",\n \"s3Title\": \"3. How We Use Your Data\",\n \"s3Intro\": \"Your data is used exclusively to provide the FreeLingo learning experience:\",\n \"s3i1\": \"Authenticating you and maintaining your session.\",\n \"s3i2\": \"Personalizing your study plan and tutor interactions.\",\n \"s3i3\": \"Tracking your learning progress over time.\",\n \"s3i4\": \"Generating contextual AI tutor responses.\",\n \"s3i5\": \"Remembering your preferences and context so the AI tutor can offer you more personalized interactions.\",\n \"s3i6\": \"Displaying and managing community feature requests and bug reports.\",\n \"s3Footer\": \"Your data is never sold, rented, or shared with third-party marketing services.\",\n \"s4Title\": \"4. External AI Services\",\n \"s4Body\": \"In the hosted service, AI chat, voice synthesis (TTS), and voice transcription (STT) are provided via OpenAI's API. Your conversation content and audio are sent to OpenAI for processing, subject to OpenAI's Privacy Policy (openai.com/privacy). Payment processing is handled by Stripe, Inc. (USA); Stripe processes payment data directly and we do not store payment card details on our servers — your transaction data is subject to Stripe's Privacy Policy (stripe.com/privacy). For self-hosted deployments, the operator chooses the AI provider; by default a local Ollama instance is used and no data leaves the server.\",\n \"s5Title\": \"5. Cookies & Session Tokens\",\n \"s5Body\": \"FreeLingo uses two technical cookies strictly necessary for the service to function: a refresh_token (httpOnly, 30-day expiry) used for session authentication, and NEXT_LOCALE (1-year expiry) to remember your language preference. No tracking or advertising cookies are used. For anonymous traffic measurement, we use Umami — a self-hosted, open-source analytics tool that does not use cookies, collects no personal data, and keeps all data on our servers.\",\n \"s6Title\": \"6. Your Rights (GDPR)\",\n \"s6Body\": \"If you are in the European Economic Area, you have the right to: access the personal data we hold about you; request correction of inaccurate data; request deletion of your account and all associated data (available directly from the Settings page); object to processing; and request data portability. To exercise these rights, contact us at the address in section 8 or delete your account directly from Settings. Legal basis for processing (Art. 6(1)(b) GDPR): we process your personal data because it is necessary for the performance of the contract between you and us — providing the FreeLingo learning service. International transfers: when using the hosted service, your conversation content and audio may be processed by OpenAI, Inc. (USA), and payment data is processed by Stripe, Inc. (USA). These transfers are carried out under the Standard Contractual Clauses approved by the European Commission (Art. 46 GDPR), ensuring an adequate level of protection. Right to lodge a complaint: you have the right to lodge a complaint with the Spanish Data Protection Authority (AEPD — aepd.es) or with the supervisory authority in your country of residence.\",\n \"s7Title\": \"7. Data Retention & Deletion\",\n \"s7Body\": \"Your data is retained for as long as your account exists. You can permanently delete your account and all associated data at any time from the Settings page. Deletion is immediate and irreversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"For privacy-related concerns about the hosted service, contact us at: contacto@arturocarreterocalvo.com. For self-hosted deployments, contact the administrator of the instance you are using. For questions about the FreeLingo open-source project, visit the project repository on GitHub.\",\n \"s9Title\": \"9. Severability\",\n \"s9Body\": \"If any provision of this policy is found to be invalid or unenforceable, that provision will be limited to the minimum extent necessary and the remaining provisions will remain in full force and effect.\",\n \"linkTerms\": \"Terms of Service\",\n \"linkBack\": \"Back to Register\",\n \"linkBackSettings\": \"Back to Settings\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Welcome back\",\n \"streak\": \"Streak\",\n \"xp\": \"XP\",\n \"level\": \"Level\",\n \"skills\": \"Skills\",\n \"today\": \"Today\",\n \"noSkills\": \"Complete the assessment to track skills.\",\n \"noLessons\": \"No lessons planned for today.\",\n \"lessonDone\": \"done\",\n \"startLesson\": \"Start\",\n \"loadingProgress\": \"Loading progress...\",\n \"noLevel\": \"No level set yet.\",\n \"completeAssessment\": \"Take assessment\",\n \"allCaughtUp\": \"All caught up.\",\n \"startWithAssessment\": \"Start with an assessment.\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"goToMyPlan\": \"My Plan →\",\n \"quickActions\": \"Quick Actions\",\n \"dayProgress\": \"Day {current} of {total}\",\n \"skipDay\": \"Skip today\",\n \"pendingLessons\": \"pending lessons\",\n \"nextStep\": \"Next step\",\n \"assessmentCreatesPlan\": \"The assessment finds your level and creates a personalised plan for your active language.\",\n \"lessonReady\": \"Lesson ready\",\n \"pendingStillAvailable\": \"You have {count} previous lessons waiting in your plan.\",\n \"noPendingToday\": \"You have completed today's lessons. You can review your plan or practise another activity.\",\n \"lessonsCompleted\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"exerciseStats\": \"{correct}/{total} exercises\",\n \"noExercisesYet\": \"No exercises yet\",\n \"planProgress\": \"Plan progress\",\n \"currentDay\": \"Current day\",\n \"daysRemaining\": \"Days left\",\n \"completedToday\": \"{completed}/{total} done\",\n \"vocabularyProgress\": \"Vocabulary {level}\",\n \"vocabularyWords\": \"{mastered}/{total} words\",\n \"recentPerformance\": \"Recent performance\",\n \"recentPerformanceDescription\": \"Based on your latest answers and reviews.\",\n \"performanceNeedsPractice\": \"Needs practice\",\n \"performanceInProgress\": \"In progress\",\n \"performanceStrong\": \"Strong\",\n \"premiumBannerTitle\": \"Practise more with FreeLingo Premium\",\n \"premiumBannerDesc\": \"Access Reading, Listening, chat with Lingu, and voice conversation.\",\n \"premiumBannerCta\": \"View plans →\"\n },\n \"assessment\": {\n \"title\": \"Assessment\",\n \"subtitle\": \"CEFR Placement\",\n \"intro\": \"We'll ask you a few questions to determine your English level.\",\n \"startWriting\": \"Start Writing Assessment\",\n \"startQuiz\": \"Start Quiz\",\n \"writing\": {\n \"title\": \"Writing Sample\",\n \"submit\": \"Submit Writing\",\n \"placeholder\": \"Write your answer here...\",\n \"evaluating\": \"Evaluating...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"of\",\n \"next\": \"Next\",\n \"submit\": \"Submit Quiz\",\n \"submitting\": \"Submitting...\"\n },\n \"result\": {\n \"title\": \"Your Level\",\n \"xpEarned\": \"XP earned\",\n \"skillsTitle\": \"Skills\",\n \"goToPlan\": \"View My Plan\",\n \"generatePlan\": \"Generate Study Plan\"\n },\n \"currentLevel\": \"Current Level\",\n \"assessedOn\": \"Assessed on\",\n \"alreadyHasPlan\": \"You already have an active study plan. Retaking will create a new one.\",\n \"retake\": \"Retake Assessment\",\n \"evaluating\": \"Evaluating...\",\n \"resultStep\": \"Result\",\n \"cefrLevel\": \"CEFR Level\",\n \"overrideLevel\": \"Override starting level\",\n \"strengths\": \"Strengths\",\n \"needsWork\": \"Needs work\",\n \"createPlan\": \"Create Plan →\",\n \"creating\": \"Creating...\",\n \"loading\": \"Loading...\",\n \"levelTest\": {\n \"title\": \"Level Completion Test\",\n \"loading\": \"Loading questions...\",\n \"loadingTest\": \"Loading test...\",\n \"submittingTest\": \"Submitting answers...\",\n \"question\": \"Question\",\n \"of\": \"of\",\n \"confirm\": \"Confirm Answer\",\n \"nextQuestion\": \"Next Question\",\n \"submit\": \"Submit Test\",\n \"result\": {\n \"title\": \"Test Complete\",\n \"recommendation\": \"Recommendation\",\n \"advance\": \"Ready to advance to the next level\",\n \"extend\": \"Continue at your current level\",\n \"repeat\": \"Review of current level recommended\",\n \"back\": \"Back to Plan\"\n }\n },\n \"suggestedLevel\": \"Suggested {aiLevel}; plan will use {selectedLevel}\",\n \"step1\": \"Step 1 / 3: Your level\",\n \"step2\": \"Step 2 / 3: Question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Step 3 / 3: Your programme\",\n \"studiedBefore\": \"Have you studied {language} before?\",\n \"studiedBeforeHint\": \"This helps us start the quiz at the right level.\",\n \"beginnerOption\": \"I am a complete beginner\",\n \"beginnerOptionHint\": \"I will start at A1, no quiz needed.\",\n \"hasExperienceOption\": \"Yes, I have some experience\",\n \"hasExperienceOptionHint\": \"I will take a short adaptive quiz (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\"\n },\n \"howManyWeeks\": \"How many weeks for level {cefr_level}?\",\n \"nWeeks\": \"{count} weeks\",\n \"intensity\": {\n \"intensive\": \"Intensive\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxed\",\n \"veryRelaxed\": \"Very relaxed\"\n },\n \"approxLessons\": \"~{count} lessons\",\n \"daysPerWeek\": \"{count} days/week\",\n \"mainGoals\": \"Main goals (select all that apply)\",\n \"goals\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Level\",\n \"summaryDuration\": \"Duration\",\n \"summaryGoals\": \"Goals\",\n \"noneSelected\": \"none selected\",\n \"buildingPlan\": \"Building plan...\",\n \"startWarningTitle\": \"Before you begin\",\n \"startWarningMessage\": \"If you leave the assessment before finishing, your progress will be lost and you will need to start over.\",\n \"startWarningMessageLevelTest\": \"If you leave the level test before finishing, your progress will be lost and you will need to retake it.\",\n \"startWarningConfirm\": \"Start\",\n \"startMyPlan\": \"Start my plan\"\n },\n \"plan\": {\n \"title\": \"My Plan\",\n \"subtitle\": \"Study Plan\",\n \"noPlan\": \"No active study plan found.\",\n \"startAssessment\": \"Take assessment first\",\n \"week\": \"Week\",\n \"currentLesson\": \"Current Lesson\",\n \"startLesson\": \"Start Lesson\",\n \"completed\": \"Completed\",\n \"generating\": \"Generating lesson...\",\n \"generatingError\": \"Failed to generate lesson\",\n \"loading\": \"Loading plan...\",\n \"learningRoadmap\": \"Learning Roadmap\",\n \"level\": \"Level\",\n \"duration\": \"Duration\",\n \"durationDetail\": \"{weeks} weeks · {days} days/week\",\n \"unitsLabel\": \"Units\",\n \"noUnitsForLevel\": \"No units available for level {level}\",\n \"takeAssessmentArrow\": \"Take Assessment →\",\n \"unitLabel\": \"Unit\",\n \"grammarCovered\": \"Grammar covered\",\n \"noLessons\": \"No lessons scheduled yet for this unit.\",\n \"weekDay\": \"Week {week}, Day {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammar\",\n \"vocabulary\": \"Vocabulary\",\n \"reading\": \"Reading\",\n \"writing\": \"Writing\",\n \"conversation\": \"Conversation\",\n \"review\": \"Review\",\n \"level_test\": \"Level Test\"\n },\n \"levelComplete\": \"Level {level} Complete. Take the Level Test\",\n \"levelCompleteDesc\": \"You have finished all units for level {level}. Take the level completion test to confirm your progress and unlock the next level.\",\n \"levelCompleteHint\": \"The test takes approximately 20 minutes and covers grammar, vocabulary, and reading.\",\n \"beginLevelTest\": \"Begin Level Test\",\n \"nLessons\": \"{count} lessons\",\n \"nGrammar\": \"{count} grammar\",\n \"levelTestLabel\": \"Level Test\",\n \"unitAriaLabel\": \"Unit {index}: {title}\",\n \"noUnitsDesc\": \"Content for this level is being prepared. Check back soon.\",\n \"completionTestTitle\": \"Level {level} Completion Test\",\n \"levelTestResult\": \"Level Test Result\",\n \"testScore\": \"Score:\",\n \"pendingLessons\": \"Pending lessons\",\n \"resume\": \"Resume\",\n \"noPlanLabel\": \"GET STARTED\",\n \"noPlanTitle\": \"Create your study plan\",\n \"noPlanDesc\": \"Take a quick assessment to discover your level and get a personalized learning path.\",\n \"noPlanHint\": \"Takes about 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Loading lesson...\",\n \"notFound\": \"Lesson not found\",\n \"backToPlan\": \"Back to Plan\",\n \"progress\": \"Progress\",\n \"exercise\": \"Exercise\",\n \"of\": \"of\",\n \"checkAnswer\": \"Check Answer\",\n \"nextExercise\": \"Next Exercise\",\n \"submitWriting\": \"Submit Writing\",\n \"yourAnswer\": \"Your answer...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Complete Lesson\",\n \"completing\": \"Completing...\",\n \"relatedGrammar\": \"Related Grammar\",\n \"explanation\": \"Explanation\",\n \"exercises\": \"Exercises\",\n \"vocabulary\": \"Vocabulary\",\n \"label\": \"Lesson\",\n \"submitAnswer\": \"Submit Answer\",\n \"lessonDone\": \"Lesson Done\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Show in\",\n \"examples\": \"Examples\",\n \"commonTraps\": \"Common traps\",\n \"miniGlossary\": \"Mini glossary\",\n \"pronunciationExercise\": \"Pronunciation\",\n \"exerciseTypeMultipleChoice\": \"Multiple Choice\",\n \"exerciseTypeFillBlank\": \"Fill in the Blank\",\n \"exerciseTypeFreeWrite\": \"Free Write\",\n \"exerciseTypePronunciation\": \"Pronunciation\",\n \"tapToListen\": \"Tap to listen\",\n \"recordNow\": \"Record your answer\",\n \"exit\": \"Exit\",\n \"exitConfirmTitle\": \"Exit lesson?\",\n \"exitConfirmMessage\": \"Your progress on this lesson will be lost.\",\n \"dayComplete\": \"Day complete!\",\n \"dayCompleteMsg\": \"All today's lessons are done.\"\n },\n \"flashcards\": {\n \"title\": \"Flashcards\",\n \"due\": \"Due\",\n \"total\": \"Total\",\n \"noDue\": \"No cards due for review\",\n \"allCaughtUp\": \"All caught up!\",\n \"generate\": \"Generate Flashcards\",\n \"generating\": \"Generating...\",\n \"topic\": \"Topic\",\n \"topicPlaceholder\": \"e.g. travel vocabulary\",\n \"count\": \"Count\",\n \"level\": \"Level\",\n \"submit\": \"Generate\",\n \"again\": \"Again\",\n \"hard\": \"Hard\",\n \"good\": \"Good\",\n \"easy\": \"Easy\",\n \"front\": \"Word\",\n \"back\": \"Definition\",\n \"loading\": \"Loading flashcards...\",\n \"sectionGenerate\": \"Generate New Cards\",\n \"speakingMode\": \"Speaking\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Say the word aloud\",\n \"refresh\": \"Refresh\",\n \"generateBtn\": \"Generate\",\n \"cards\": \"cards\",\n \"myVocabularyBtn\": \"My Vocabulary\",\n \"myVocabulary\": \"My Vocabulary\",\n \"myVocabularyEmpty\": \"No saved words yet. Select a word while reading to save it here.\",\n \"myVocabularyNoResults\": \"No saved words match your search.\",\n \"vocabularySearch\": \"Search words...\",\n \"vocabularyPageInfo\": \"Page {page} of {pages}\",\n \"vocabularyPrev\": \"Prev\",\n \"vocabularyNext\": \"Next\",\n \"backToFlashcards\": \"Flashcards\",\n \"noCardsHint\": \"Use + Generate to create your first cards with AI\",\n \"tapToHide\": \"tap to hide\",\n \"tapToReveal\": \"tap to reveal\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"AI Tutor\",\n \"subtitle\": \"{language} — Ask anything\",\n \"placeholder\": \"Type a message...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"noConversation\": \"Select or start a conversation\",\n \"newConversation\": \"New Chat\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Loading...\",\n \"thinking\": \"Thinking...\",\n \"takingLonger\": \"Taking longer than expected...\",\n \"errorMessage\": \"Something went wrong. Please try again.\",\n \"deleteTitle\": \"Delete Chat\",\n \"deleteMessage\": \"This conversation will be permanently deleted.\",\n \"deleteConfirm\": \"Delete\",\n \"enterToSend\": \"Enter to send\",\n \"continueInVoice\": \"Continue in voice\",\n \"memoryUpdated\": \"Memory updated\"\n },\n \"progress\": {\n \"title\": \"Progress\",\n \"subtitle\": \"Skills Tracker\",\n \"xp\": \"XP\",\n \"streak\": \"Streak\",\n \"lessons\": \"Lessons\",\n \"accuracy\": \"Accuracy\",\n \"noPlan\": \"No active study plan.\",\n \"startPlan\": \"Start assessment\",\n \"competencies\": \"Unit Competencies\",\n \"vocabularySection\": \"Vocabulary\",\n \"skills\": \"Skill Accuracy\",\n \"mastered\": \"Mastered\",\n \"inProgress\": \"In Progress\",\n \"notStarted\": \"Not Started\",\n \"loading\": \"Loading progress...\",\n \"days\": \"days\",\n \"noData\": \"Complete some lessons to see your progress here.\",\n \"exploreVocab\": \"Explore vocabulary sets\",\n \"competenciesSection\": \"{level} Grammar Competencies\",\n \"noCompetencies\": \"Complete lessons to start tracking your competencies.\",\n \"goToMyPlan\": \"→ Go to My Plan\",\n \"addToFlashcards\": \"Add words from a set to your flashcard deck to track individual word progress.\",\n \"noActivePlanDesc\": \"Complete the assessment to start tracking your skills.\",\n \"vocabularyHeader\": \"{level} Vocabulary\",\n \"currentLevelOnly\": \"Current level only\",\n \"allLevels\": \"All levels\"\n },\n \"grammar\": {\n \"title\": \"Grammar Reference\",\n \"subtitle\": \"Reference\",\n \"searchPlaceholder\": \"Search grammar topics...\",\n \"allLevels\": \"All Levels\",\n \"allCategories\": \"All\",\n \"noResults\": \"No topics found.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Key Rules\",\n \"examples\": \"Examples\",\n \"commonMistakes\": \"Common Mistakes\",\n \"relatedTopics\": \"Related Topics\",\n \"backToGrammar\": \"Grammar Reference\",\n \"explanation\": \"Explanation\",\n \"backLink\": \"Back to Grammar\",\n \"notFound\": \"Topic not found.\",\n \"topicsFound\": \"{count, plural, one {# topic found} other {# topics found}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulary Hub\",\n \"subtitle\": \"Vocabulary\",\n \"all\": \"All\",\n \"searchPlaceholder\": \"Search sets...\",\n \"sets\": \"sets\",\n \"words\": \"words\",\n \"addAll\": \"Add All {count} to Flashcards\",\n \"adding\": \"Adding...\",\n \"added\": \"Added {count} flashcards\",\n \"addError\": \"Failed to add flashcards\",\n \"frequency\": \"freq\",\n \"backToVocabulary\": \"Vocabulary Hub\",\n \"notFound\": \"Set not found.\",\n \"vocabularySet\": \"Vocabulary Set\",\n \"cardsAdded\": \"{count} cards added to your flashcard deck.\",\n \"goToFlashcards\": \"Go to Flashcards →\",\n \"addFailed\": \"Failed to add flashcards.\",\n \"noResults\": \"No vocabulary sets match your search\"\n },\n \"phrasebook\": {\n \"title\": \"Phrasebook\",\n \"subtitle\": \"Phrases\",\n \"all\": \"All\",\n \"allRegisters\": \"All registers\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutral\",\n \"informal\": \"Informal\",\n \"copied\": \"Copied!\",\n \"copy\": \"Copy\",\n \"noResults\": \"No phrases match your filters\",\n \"level\": \"Level\",\n \"register\": \"Register\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation shown} other {# situations shown}}\",\n \"searchPlaceholder\": \"Search phrases...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Overview\",\n \"users\": \"Users\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Reviews\",\n \"invites\": \"Invite Links\",\n \"createUser\": \"Create User\",\n \"createInvite\": \"Generate Invite\",\n \"deactivate\": \"Deactivate\",\n \"activate\": \"Activate\",\n \"loading\": \"Loading...\",\n \"loadError\": \"Failed to load user data\",\n \"userNotFound\": \"User not found\",\n \"role\": \"Role\",\n \"status\": \"Status\",\n \"active\": \"Active\",\n \"inactive\": \"Inactive\",\n \"inviteCreated\": \"Invite link created\",\n \"copyLink\": \"Copy link\",\n \"inviteCopied\": \"Invite link copied\",\n \"deleteUser\": \"Delete User\",\n \"deleteUserMessage\": \"Delete this user? This action cannot be undone.\",\n \"deleteConfirm\": \"Delete\",\n \"noUsers\": \"No users found\",\n \"inviteLink\": \"Invite Link (valid 48h)\",\n \"total\": \"total\",\n \"delete\": \"Delete\",\n \"inviteBtn\": \"+ Invite Link\",\n \"createUserBtn\": \"+ Create User\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\",\n \"roleUser\": \"User\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Username\",\n \"invalidUsernameChars\": \"Username can only contain letters, numbers, hyphens, underscores and dots\",\n \"fieldEmail\": \"Email (optional)\",\n \"fieldPassword\": \"Password\",\n \"fieldDisplayName\": \"Display Name\",\n \"fieldNativeLanguage\": \"Native Language\",\n \"fieldTargetLanguage\": \"Language to learn\",\n \"fieldRole\": \"Account type\",\n \"submitCreate\": \"Create\",\n \"searchPlaceholder\": \"Search by username or email...\",\n \"statsTitle\": \"Usage statistics\",\n \"statsCefr\": \"Current level\",\n \"statsUnit\": \"Current unit\",\n \"statsPlanWeeks\": \"Plan duration\",\n \"sectionXpProgress\": \"XP & Progress\",\n \"statsXp\": \"Total XP\",\n \"statsStreak\": \"Streak\",\n \"statsActiveDays\": \"Active days\",\n \"statsLessons\": \"Lessons completed\",\n \"statsExercises\": \"Exercises correct\",\n \"statsMessages\": \"Messages sent\",\n \"statsTokensTotal\": \"Tokens consumed (total)\",\n \"statsTokensChat\": \"Tutor tokens\",\n \"statsTokensConversation\": \"Voice tokens\",\n \"statsTokensNote\": \"Only available when the AI provider returns this information\",\n \"statsNoData\": \"No progress data\",\n \"viewStats\": \"View stats\",\n \"weeks\": \"weeks\",\n \"statsTestScore\": \"Final test score\",\n \"statsDays\": \"days\",\n \"sectionQuota\": \"Conversation Quotas\",\n \"quotaWeeklySessions\": \"Weekly sessions limit\",\n \"quotaDailyMinutes\": \"Daily minutes limit\",\n \"quotaWeeklyMinutes\": \"Weekly minutes limit\",\n \"quotaMonthlyTokens\": \"Monthly tokens limit\",\n \"quotaUnlimitedLabel\": \"Unlimited (0)\",\n \"quotaUsedSessions\": \"Used this week\",\n \"quotaUsedMinutes\": \"Used today\",\n \"quotaUsedWeeklyMinutes\": \"Used this week (min)\",\n \"quotaSave\": \"Save quotas\",\n \"quotaSaved\": \"Quotas saved.\",\n \"emailVerified\": \"Email verified\",\n \"emailNotVerified\": \"Email not verified\",\n \"verifyEmail\": \"Verify email\",\n \"unverifyEmail\": \"Mark as unverified\",\n \"emailVerifiedSuccess\": \"Email marked as verified.\",\n \"emailUnverifiedSuccess\": \"Email marked as unverified.\",\n \"fieldSubscription\": \"Subscription\",\n \"fieldEndsRenews\": \"Ends / Renews\",\n \"fieldStripeCustomer\": \"Stripe Customer\",\n \"maintenanceTitle\": \"Maintenance Mode\",\n \"maintenanceOn\": \"ON\",\n \"maintenanceEnable\": \"Enable Maintenance\",\n \"maintenanceDisable\": \"Disable Maintenance\",\n \"maintenanceDesc\": \"When enabled, all subscription-gated features (tutor chat, voice conversations, listening & reading exercises) will be unavailable to all users.\",\n \"cannotDeactivateSelf\": \"Cannot deactivate your own account\",\n \"cannotDeleteSelf\": \"Cannot delete your own account\",\n \"sectionLanguages\": \"Languages\",\n \"sectionActivity\": \"Activity\",\n \"statsActive\": \"Active\",\n \"manageUsers\": \"Manage users\",\n \"manageUsersDesc\": \"Review accounts, subscriptions, roles, and access status.\",\n \"createUserDesc\": \"Create a managed user account with an initial study language.\",\n \"reviewFeedback\": \"Review feedback\",\n \"reviewFeedbackDesc\": \"Triage feature requests and bug reports from learners.\",\n \"reviewReviews\": \"Review reviews\",\n \"reviewReviewsDesc\": \"Approve verified learner reviews for display on the landing page.\",\n \"maintenanceOnDesc\": \"Maintenance mode is active for subscription-gated learning tools.\",\n \"maintenanceOffDesc\": \"Maintenance mode is off. Subscription-gated learning tools are available.\",\n \"openSystemControls\": \"System controls\",\n \"adminRequired\": \"Admin access required\",\n \"usersLoadError\": \"Failed to load users\",\n \"createUserError\": \"Failed to create user\",\n \"updateUserError\": \"Failed to update user\",\n \"deleteUserError\": \"Failed to delete user\",\n \"inviteError\": \"Failed to generate invite link\",\n \"copyInviteError\": \"Failed to copy invite link\",\n \"maintenanceError\": \"Failed to update maintenance mode\",\n \"maintenanceOff\": \"OFF\",\n \"inviteExpiry\": \"Single-use link. Expires after 48 hours.\",\n \"searchAction\": \"Search users\",\n \"roleFilter\": \"Filter by role\",\n \"statusFilter\": \"Filter by status\",\n \"subscriptionFilter\": \"Filter by subscription\",\n \"allRoles\": \"All roles\",\n \"allStatuses\": \"All statuses\",\n \"allSubscriptions\": \"All subscriptions\",\n \"clearFilters\": \"Clear\",\n \"userColumn\": \"User\",\n \"actions\": \"Actions\",\n \"createUserSheetDesc\": \"The account is created immediately. Email verification is sent when email is enabled.\",\n \"activateUser\": \"Activate user\",\n \"deactivateUser\": \"Deactivate user\",\n \"activateUserMessage\": \"Activate this user account?\",\n \"deactivateUserMessage\": \"Deactivate this user account? They will not be able to use the app until reactivated.\",\n \"tabProfile\": \"Profile\",\n \"tabLanguages\": \"Languages\",\n \"tabActivity\": \"Activity\",\n \"tabQuota\": \"Quotas\",\n \"tabSubscription\": \"Subscription\",\n \"sectionCommunication\": \"Communication\",\n \"quotaCurrentUsage\": \"Current usage\",\n \"quotaConfiguredLimits\": \"Configured limits\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sessions\",\n \"unitTokens\": \"tokens\",\n \"quotaZeroMeansUnlimited\": \"Set a limit to 0 for unlimited access.\",\n \"quotaValidationError\": \"All quota values must be whole numbers equal to or greater than 0.\",\n \"quotaSaveError\": \"Failed to save quota limits.\",\n \"subscriptionOverride\": \"Manual subscription override\",\n \"subscriptionOverrideDesc\": \"This changes the user's access period directly and may override Stripe-managed state.\",\n \"subscriptionUpdateError\": \"Failed to update subscription.\",\n \"saving\": \"Saving...\",\n \"verifyEmailConfirmMessage\": \"Mark this email address as verified?\",\n \"unverifyEmailConfirmMessage\": \"Mark this email address as unverified?\",\n \"subscriptionConfirmTitle\": \"Change subscription\",\n \"subscriptionConfirmMessage\": \"Apply subscription plan: {plan}?\",\n \"subscriptionConfirm\": \"Apply\",\n \"feedbackStatusError\": \"Failed to update feedback status.\",\n \"feedbackDeleteError\": \"Failed to delete feedback entry.\",\n \"allFeedback\": \"All feedback\",\n \"feedbackTotal\": \"Total feedback\",\n \"feedbackQueue\": \"Feedback queue\",\n \"feedbackSearchPlaceholder\": \"Search by title, description, or author...\",\n \"feedbackSearchAction\": \"Search feedback\",\n \"feedbackTypeFilter\": \"Filter by feedback type\",\n \"noFilteredFeedback\": \"No feedback matches the current filters.\",\n \"feedbackItem\": \"Entry\",\n \"type\": \"Type\",\n \"signals\": \"Signals\",\n \"feedbackStatusAction\": \"Change feedback status\",\n \"adminStatsError\": \"Failed to load admin metrics.\",\n \"activeUsers\": \"Active users\",\n \"paidAccess\": \"Active / trial\",\n \"pendingFeedback\": \"Pending feedback\",\n \"pendingReviews\": \"Reviews pending approval\",\n \"operationalAlerts\": \"Operational alerts\",\n \"pendingBugs\": \"Pending bug reports\",\n \"pendingBugsDesc\": \"Bug reports waiting for admin triage.\",\n \"pastDueSubscriptions\": \"Past due subscriptions\",\n \"pastDueSubscriptionsDesc\": \"Accounts with payment issues that may need review.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Frequently Asked Questions\",\n \"q_start\": \"Where do I start?\",\n \"a_start\": \"Start with the Assessment. It detects your English level (A1–C2) and your strengths and weaknesses. With that result you can generate a personalized Study Plan that fills your Dashboard with daily lessons. Without the Assessment, the Dashboard is empty.\",\n \"q_workflow\": \"What is the full workflow?\",\n \"workflowStep1\": \"Register and select your native language\",\n \"workflowStep2\": \"Take the Assessment → your CEFR level is detected\",\n \"workflowStep3\": \"Generate your Study Plan from the Dashboard\",\n \"workflowStep4\": \"Complete your daily lessons (START button in the Dashboard)\",\n \"workflowStep5\": \"Use Flashcards to train vocabulary in parallel\",\n \"workflowStep6\": \"Practice free conversation with the AI Tutor\",\n \"q_language\": \"What language will I learn?\",\n \"a_language\": \"FreeLingo currently supports several languages (American English, British English, French, German, Italian, Portuguese, Spanish), and we will keep adding more over time. When a new language becomes available, you will find it in Settings → My Languages — add it and start learning right away.\",\n \"q_assessment\": \"What is the Assessment?\",\n \"a_assessment\": \"A 15-question AI-generated test covering grammar, vocabulary, reading comprehension, and sentence transformation, with difficulty ranging from A1 to C1. When you finish, you get your CEFR level, a score, and an analysis of your strengths and weaknesses. This result feeds into the Study Plan and generated Flashcards.\",\n \"q_studyPlan\": \"What is the Study Plan and how do I generate one?\",\n \"a_studyPlan\": \"After the Assessment, go to the Dashboard and click Generate Study Plan. A week-by-week plan with daily lessons tailored to your CEFR level and goals will be created automatically. Each lesson includes multiple-choice and free-writing exercises evaluated by AI.\",\n \"q_flashcards\": \"What are Flashcards for?\",\n \"a_flashcards\": \"A vocabulary training system using the SM-2 spaced repetition algorithm. Generate cards on any topic (e.g. \\\"business\\\", \\\"phrasal verbs\\\", \\\"food\\\") with a definition, example sentence, and translation into your native language. The system calculates when to show each card again just before you forget it. Completely independent from the Study Plan.\",\n \"q_vocabulary\": \"How do I add words to my vocabulary?\",\n \"a_vocabulary\": \"You can save words in two ways: (1) While reading a lesson, listening exercise, or chatting with the tutor, highlight any word with your mouse and click Save in the tooltip that appears — the AI will generate a definition, example sentence, and translation into your native language. (2) Go to Vocabulary, open a vocabulary set for your level, and click Add All to import the whole set at once. Your saved words appear in My Vocabulary under the Flashcards section.\",\n \"q_tutor\": \"How does the AI Tutor work?\",\n \"a_tutor\": \"A free-form streaming chat. The tutor knows your CEFR level and weak points to tailor its responses. Ask grammar questions, request explanations, practice writing in English, or just have a conversation. Conversations are saved and accessible from the sidebar across sessions.\",\n \"q_voice\": \"How does the voice conversation work?\",\n \"a_voice\": \"The Voice Conversation mode lets you speak with the AI tutor in real time. Press Start to begin — the app listens for your voice automatically using voice activity detection (VAD) and the tutor replies with synthesised speech. You can interrupt the tutor at any moment (barge-in). The session ends when you reach the time limit or press Stop. Make sure your browser has microphone permission enabled.\",\n \"q_listening\": \"How do listening exercises work?\",\n \"a_listening\": \"The Listening section generates short audio passages at your CEFR level, voiced by AI. Listen to the audio, then answer 5 comprehension questions. After submitting, you get your score (0–5), XP, correct answers, and the full transcript. You can generate new exercises on demand.\",\n \"q_reading\": \"How do reading exercises work?\",\n \"a_reading\": \"The Reading section generates texts at your CEFR level — notices, emails, articles, blog posts, and more. Read the passage and answer 5 multiple-choice questions. After submitting, you get your score (0–5) and XP. New exercises can be generated on demand.\",\n \"q_providers\": \"Which AI providers does FreeLingo support?\",\n \"a_providers_intro\": \"Configurable in .env via LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, free. Requires Ollama running on the host. Recommended model: gemma4:e4b. May be slow without a GPU.\",\n \"provider_openai\": \"OpenAI API (GPT-4o, etc.). Fast and reliable. Requires OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Requires ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Requires DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Can I invite other people?\",\n \"a_invite\": \"Yes. From Admin → Users the admin can create users directly or generate single-use invite links that expire in 48 hours. Public registration is disabled by default (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"How do I change my password or native language?\",\n \"a_password\": \"Go to Settings. You can update your display name, native language, and password from there.\",\n \"q_uiLanguage\": \"How do I change the platform language?\",\n \"a_uiLanguage\": \"Go to Settings and find the Platform language dropdown in the Profile section. Select your preferred language and the entire interface will switch immediately.\",\n \"q_feedback\": \"How do I suggest a new feature or report a bug?\",\n \"a_feedback\": \"Use the Feedback section in the sidebar. You can create suggestions for new features or report bugs. Vote on other users' ideas, leave comments, and track the status of each request. All submissions are public and are reviewed by the admin.\"\n },\n \"cookieBanner\": {\n \"message\": \"We use strictly necessary cookies to keep you logged in. No tracking or advertising cookies are used.\",\n \"learnMore\": \"Privacy policy\",\n \"accept\": \"Got it\"\n },\n \"error\": {\n \"label\": \"Unexpected error\",\n \"title\": \"Something went wrong\",\n \"body\": \"An unexpected error occurred. You can try again or go back to the dashboard.\",\n \"retry\": \"Try again\",\n \"dashboard\": \"Go to dashboard\",\n \"digest\": \"Error reference\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"body\": \"The page you are looking for does not exist or has been moved.\",\n \"dashboard\": \"Go to dashboard\",\n \"home\": \"Home\"\n },\n \"errors\": {\n \"notFound\": \"Page not found\",\n \"serverError\": \"Something went wrong\",\n \"unauthorized\": \"Please log in\",\n \"backHome\": \"Back to home\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Voice Practice\",\n \"start\": \"Start Session\",\n \"stop\": \"Stop\",\n \"startNew\": \"Start New Session\",\n \"statusLoading\": \"Loading voice model...\",\n \"statusReady\": \"Ready\",\n \"statusWarming\": \"Loading models...\",\n \"statusConnecting\": \"Connecting...\",\n \"statusListening\": \"Listening...\",\n \"statusDetecting\": \"Detecting speech...\",\n \"statusSpeaking\": \"Speaking...\",\n \"statusError\": \"Error\",\n \"errorServicesDisabled\": \"Voice services are not enabled on this server.\",\n \"errorConnection\": \"Connection error. Please try again.\",\n \"errorUnauthorized\": \"Session expired. Please refresh.\",\n \"errorMic\": \"Microphone access denied.\",\n \"errorVadInit\": \"Failed to initialize voice recognition. Make sure your browser supports WebAssembly.\",\n \"warningTimeout\": \"Session ending in {seconds}s\",\n \"sessionEnded\": \"Session ended\",\n \"tapToStart\": \"Speak when ready\",\n \"you\": \"You\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sessions this week\",\n \"quotaMinutes\": \"Minutes today\",\n \"quotaUnlimited\": \"Unlimited\",\n \"quotaExceededSessions\": \"You have used all your sessions for this week.\",\n \"quotaExceededTime\": \"You have used all your daily practice time.\",\n \"quotaExceededTokens\": \"You have used all your monthly AI tokens.\",\n \"quotaTokens\": \"Tokens this month\",\n \"memoryUpdated\": \"Memory updated\",\n \"startersHint\": \"Or start with a topic\",\n \"starters\": [\n \"Art & creativity\",\n \"Books & reading\",\n \"Childhood memories\",\n \"City vs. countryside\",\n \"Cooking & recipes\",\n \"Dreams & ambitions\",\n \"Family & relationships\",\n \"Fashion & style\",\n \"Favourite films\",\n \"Festivals & traditions\",\n \"Food from around the world\",\n \"Health & wellbeing\",\n \"Hobbies & crafts\",\n \"Language learning\",\n \"Learning new skills\",\n \"Money & budgeting\",\n \"Music & concerts\",\n \"Pets & animals\",\n \"Public transport\",\n \"Science & space\",\n \"Shopping habits\",\n \"Social media\",\n \"Sports & fitness\",\n \"Technology & gadgets\",\n \"The environment\",\n \"Travel destinations\",\n \"TV shows & series\",\n \"Weekend plans\",\n \"Work & career goals\",\n \"Working from home\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Record\",\n \"stop\": \"Stop\",\n \"processing\": \"Processing\",\n \"error\": \"Error\",\n \"ariaRecord\": \"Start recording\",\n \"ariaStop\": \"Stop recording\"\n },\n \"audioPlayer\": {\n \"listen\": \"Listen\",\n \"stop\": \"Stop\",\n \"ariaListen\": \"Listen to pronunciation\",\n \"ariaStop\": \"Stop audio\"\n },\n \"languages\": {\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"fr\": \"French\",\n \"pt\": \"Portuguese\",\n \"de\": \"German\",\n \"it\": \"Italian\",\n \"pl\": \"Polish\",\n \"nl\": \"Dutch\",\n \"ro\": \"Romanian\",\n \"ru\": \"Russian\",\n \"myLanguages\": \"My Languages\",\n \"addLanguage\": \"Add new language\",\n \"selectLanguage\": \"Select the language you want to learn\",\n \"activeLanguage\": \"Active\",\n \"switchTo\": \"Switch to this\",\n \"switching\": \"Switching to {language}...\",\n \"switched\": \"Switched to {language} ({level})\",\n \"removeLanguage\": \"Remove language\",\n \"removeConfirmTitle\": \"Remove {language}?\",\n \"removeConfirmMessage\": \"All progress, lessons, flashcards and data associated with this language will be permanently deleted. This action cannot be undone.\",\n \"removeConfirmButton\": \"Remove\",\n \"deleteError\": \"Could not delete {language}. Please try again.\",\n \"noLanguages\": \"You have no languages configured.\",\n \"progressLabel\": \"Progress\",\n \"levelLabel\": \"Level\",\n \"xpLabel\": \"Total XP\",\n \"streakLabel\": \"Streak\",\n \"lessonsLabel\": \"Lessons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"View details\",\n \"supportedLanguages\": \"Available languages\"\n },\n \"targetLanguages\": {\n \"en-US\": \"American English\",\n \"en-GB\": \"British English\",\n \"es-ES\": \"Spanish\",\n \"it-IT\": \"Italian\",\n \"pt-PT\": \"Portuguese\",\n \"fr-FR\": \"French\",\n \"de-DE\": \"German\",\n \"ja-JP\": \"Japanese\",\n \"ko-KR\": \"Korean\",\n \"zh-CN\": \"Chinese (Mainland China)\",\n \"en\": \"English\",\n \"es\": \"Spanish\",\n \"it\": \"Italian\",\n \"pt\": \"Portuguese\",\n \"fr\": \"French\",\n \"de\": \"German\",\n \"ja\": \"Japanese\",\n \"ko\": \"Korean\",\n \"zh\": \"Chinese\",\n \"es-ES-description\": \"Spanish as spoken in Spain.\",\n \"it-IT-description\": \"Italian as spoken in Italy.\",\n \"pt-PT-description\": \"Portuguese as spoken in Portugal.\",\n \"en-US-description\": \"English as spoken in the United States.\",\n \"en-GB-description\": \"English as spoken in the United Kingdom.\",\n \"fr-FR-description\": \"French as spoken in France.\",\n \"de-DE-description\": \"German as spoken in Germany.\",\n \"ja-JP-description\": \"Japanese as spoken in Japan.\",\n \"ko-KR-description\": \"Korean as spoken in South Korea.\",\n \"zh-CN-description\": \"Mandarin Chinese as spoken in Mainland China, using simplified characters.\"\n },\n \"onboarding\": {\n \"title\": \"Choose your language\",\n \"subtitle\": \"Which language do you want to learn?\",\n \"chooseVariant\": \"Select variant\",\n \"continue\": \"Continue\",\n \"saveFailed\": \"Failed to save preferences\",\n \"goals\": {\n \"title\": \"Your Learning Goals\",\n \"subtitle\": \"What do you want to use English for? Select all that apply.\",\n \"skip\": \"Skip\",\n \"travel\": \"Travel & Tourism\",\n \"work\": \"Work & Professional\",\n \"academic\": \"Studies & Academic\",\n \"daily\": \"Daily Conversation\",\n \"media\": \"Movies, Music & Series\",\n \"emigration\": \"Living Abroad\",\n \"exams\": \"Exams & Certifications\",\n \"social\": \"Socializing\"\n },\n \"trialHeadline\": \"Free trial\",\n \"trialTitle\": \"{days} days of full access\",\n \"trialDesc\": \"AI chat tutor, voice conversations, listening and reading exercises. No commitment, cancel anytime.\",\n \"trialCtaMonthly\": \"Start at €{price}/month\",\n \"trialCtaYearly\": \"Start at €{price}/year\",\n \"trialSkip\": \"Continue with free features\",\n \"trialNoCharge\": \"Card required. No charge until trial ends.\",\n \"trialError\": \"Could not start payment. Please try again.\",\n \"newLanguageHeadline\": \"What new language do you want to learn?\",\n \"newLanguageSubtitle\": \"A new study plan will be created for this language.\"\n },\n \"tour\": {\n \"skip\": \"Skip\",\n \"prev\": \"Back\",\n \"next\": \"Next\",\n \"done\": \"Get started\",\n \"step1\": {\n \"label\": \"Welcome\",\n \"title\": \"Welcome to FreeLingo\",\n \"desc\": \"FreeLingo is your AI-powered language tutor. Practice at your own pace, at any time, through conversation, lessons, and smart flashcards.\"\n },\n \"step2\": {\n \"label\": \"Text chat\",\n \"title\": \"Chat with your tutor\",\n \"desc\": \"Have written conversations with your AI tutor. Ask questions, get corrections, and practise grammar and vocabulary in a natural way.\"\n },\n \"step3\": {\n \"label\": \"Voice\",\n \"title\": \"Speak in real time\",\n \"desc\": \"Use voice conversation mode to practise your spoken language with real-time transcription and instant feedback on your pronunciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"Never forget a word\",\n \"desc\": \"Flashcards use the SM-2 spaced repetition algorithm so you review words exactly when you're about to forget them — maximising retention.\"\n },\n \"step5\": {\n \"label\": \"Study plan\",\n \"title\": \"Your personalised plan\",\n \"desc\": \"Based on your level assessment, FreeLingo builds a structured study plan with daily lessons adapted to your goals and progress.\"\n },\n \"step6\": {\n \"label\": \"Practice\",\n \"title\": \"Listening & Reading\",\n \"desc\": \"Test your comprehension with AI-generated exercises. Listen to a passage and answer 5 questions, or read a text at your CEFR level — earn XP for every correct answer.\"\n },\n \"step7\": {\n \"label\": \"Ready\",\n \"title\": \"You're all set!\",\n \"desc\": \"Start with today's lesson, open a chat, practise listening or reading — FreeLingo adapts to how you like to learn.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium required\",\n \"paywallTitle\": \"Unlock FreeLingo Premium\",\n \"paywallDesc\": \"Start your {days}-day free trial, no charge today. Cancel anytime.\",\n \"paywallNoCharge\": \"Card required · No charge until trial ends · Cancel anytime\",\n \"paywallSkip\": \"Continue with free features\",\n \"trialDays\": \"{days, plural, one {# day of trial} other {# days of trial}}\",\n \"planMonthly\": \"— Start for €{price}/month →\",\n \"planYearly\": \"— Start for €{price}/year →\",\n \"checkoutError\": \"Unable to start checkout. Please try again.\",\n \"pricingLabel\": \"Pricing\",\n \"pricingTitle\": \"Simple, transparent pricing\",\n \"pricingDesc\": \"7 days free with your subscription · Cancel anytime\",\n \"planMonthlyName\": \"Monthly\",\n \"planYearlyName\": \"Yearly\",\n \"bestValue\": \"Best value\",\n \"month\": \"month\",\n \"year\": \"year\",\n \"ctaStart\": \"Start {days}-day free trial\",\n \"planFeature\": {\n \"feature1\": \"Chat with your AI tutor\",\n \"feature2\": \"Voice conversations\",\n \"feature3\": \"Listening exercises\",\n \"feature4\": \"Reading exercises\",\n \"feature5\": \"2 months free\"\n },\n \"planFreeName\": \"Free\",\n \"trialBadge\": \"7 days free\",\n \"ctaRegister\": \"Get started\",\n \"everythingFree\": \"Everything included in the free plan, plus:\",\n \"freeFeature\": {\n \"f1\": \"Level test & assessment\",\n \"f2\": \"Lessons & study plan\",\n \"f3\": \"Grammar & vocabulary reference\",\n \"f4\": \"Dashboard & progress tracking\",\n \"f5\": \"Flashcards & spaced repetition\"\n },\n \"successLabel\": \"Payment confirmed\",\n \"successTitle\": \"Welcome to FreeLingo Premium!\",\n \"successDesc\": \"Your subscription is now active. Enjoy unlimited access to all features.\",\n \"successRedirect\": \"Redirecting to dashboard in {seconds}s...\",\n \"successCta\": \"Go to dashboard\",\n \"canceledLabel\": \"Checkout canceled\",\n \"canceledTitle\": \"No charge was made\",\n \"canceledDesc\": \"You can subscribe any time. Your progress and settings are intact.\",\n \"canceledCtaDashboard\": \"Go to dashboard\",\n \"canceledCtaSettings\": \"Go to settings\",\n \"section\": \"Subscription\",\n \"status\": \"Status\",\n \"statusActive\": \"Active\",\n \"statusCanceled\": \"Canceled\",\n \"statusTrialing\": \"Trial\",\n \"statusPastDue\": \"Past due\",\n \"statusNone\": \"No subscription\",\n \"nextBilling\": \"Next billing\",\n \"accessUntil\": \"Access until\",\n \"manage\": \"Manage subscription\",\n \"subscribe\": \"Subscribe\",\n \"portalError\": \"Unable to open billing portal. Please try again.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Free to self-host on your own server\",\n \"openSourceCta\": \"View on GitHub\",\n \"planFreeBadge\": \"Free Forever\",\n \"priceAmount\": \"€{amount}\",\n \"pricePerPeriod\": \"€ / {period}\",\n \"priceOriginal\": \"€{price} / {period}\",\n \"planFreePriceLabel\": \"Free\",\n \"planFreeDesc\": \"All the essentials to start learning\",\n \"planFreeCta\": \"Start\"\n },\n \"whatsNew\": {\n \"title\": \"What's New\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Got it\",\n \"entry1\": {\n \"label\": \"Clearer dashboard\",\n \"desc\": \"Your dashboard now focuses on what to do next, with clearer daily lessons, plan progress, vocabulary progress, and recent performance at a glance.\"\n },\n \"entry2\": {\n \"label\": \"More languages to learn\",\n \"desc\": \"French, German, Italian, Japanese, Korean, Mainland Chinese, Portuguese, and Spanish are now available — with full learning paths from beginner to advanced, grammar, vocabulary, phrases, Reading, Listening, and more. Add them from Settings → My Languages.\"\n },\n \"entry3\": {\n \"label\": \"Add a review from your profile\",\n \"desc\": \"You can now share your thoughts about FreeLingo directly from Settings → Profile. Your review helps other learners discover the platform.\"\n },\n \"entry4\": {\n \"label\": \"Bug fixes\",\n \"desc\": \"Various minor bug fixes and stability improvements across the platform.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"Email\",\n \"placeholderEmail\": \"your@email.com\",\n \"labelSubject\": \"Subject\",\n \"placeholderSubject\": \"Brief description of your question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Describe your question or feedback...\",\n \"send\": \"Send\",\n \"sending\": \"Sending...\",\n \"sent\": \"Message sent\",\n \"errorGeneric\": \"Failed to send. Please try again.\"\n },\n \"listening\": {\n \"title\": \"Listening\",\n \"topic\": \"Topic\",\n \"listenLabel\": \"Listen\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"audioError\": \"Unable to load audio\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"transcript\": \"Transcript\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Listening history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\"\n },\n \"reading\": {\n \"title\": \"Reading\",\n \"topic\": \"Topic\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Submit answers\",\n \"generating\": \"Generating exercise...\",\n \"generatingDesc\": \"AI is creating a new exercise. This usually takes about 30 seconds.\",\n \"generatingLong\": \"Taking longer than expected...\",\n \"noExercises\": \"No exercises available for your level.\",\n \"generate\": \"Generate exercise\",\n \"alreadyAttempted\": \"You have already completed this exercise.\",\n \"errorLoading\": \"Failed to load exercise. Please try again.\",\n \"errorSubmit\": \"Failed to submit answers. Please try again.\",\n \"resultsLabel\": \"Results\",\n \"review\": \"Answer review\",\n \"nextExercise\": \"Next exercise\",\n \"viewHistory\": \"History\",\n \"history\": \"History\",\n \"historyTitle\": \"Reading history\",\n \"historyEmpty\": \"No completed exercises yet.\",\n \"practiceMore\": \"Practice\",\n \"moreInHistory\": \"+{count} more\",\n \"practiceAgain\": \"Practice again\",\n \"replayNoXp\": \"Replay (no XP)\",\n \"selectWordHint\": \"Select a word to save it to your vocabulary\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Feature requests & bug reports\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bug reports\",\n \"newFeature\": \"+ New suggestion\",\n \"newBug\": \"+ Report a bug\",\n \"sortBy\": \"Sort by\",\n \"sortVotes\": \"Most voted\",\n \"sortDate\": \"Most recent\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"All\",\n \"noEntries\": \"Nothing here yet. Be the first to submit one.\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} comments\",\n \"comment\": \"1 comment\",\n \"by\": \"by\",\n \"statusPending\": \"Pending\",\n \"statusPlanned\": \"Planned\",\n \"statusInProgress\": \"In progress\",\n \"statusDone\": \"Done\",\n \"statusDeclined\": \"Declined\",\n \"modalCreateTitleFeature\": \"New suggestion\",\n \"modalCreateTitleBug\": \"Report a bug\",\n \"labelTitle\": \"Title\",\n \"placeholderTitleFeature\": \"Describe your suggestion in one sentence\",\n \"placeholderTitleBug\": \"Short description of the bug\",\n \"labelDescription\": \"Details\",\n \"placeholderDescriptionFeature\": \"Explain the feature and why it would be useful\",\n \"placeholderDescriptionBug\": \"Steps to reproduce, expected behaviour, what happened instead\",\n \"submit\": \"Submit\",\n \"submitting\": \"Submitting...\",\n \"cancel\": \"Cancel\",\n \"deleteEntry\": \"Delete\",\n \"deleteEntryConfirmTitle\": \"Delete entry\",\n \"deleteEntryConfirmMessage\": \"Are you sure you want to delete this entry? This cannot be undone.\",\n \"deleteEntryConfirm\": \"Delete\",\n \"addComment\": \"Add a comment\",\n \"commentPlaceholder\": \"Write a comment...\",\n \"postComment\": \"Post\",\n \"postingComment\": \"Posting...\",\n \"deleteComment\": \"Delete\",\n \"deleteCommentConfirmTitle\": \"Delete comment\",\n \"deleteCommentConfirmMessage\": \"Delete this comment?\",\n \"deleteCommentConfirm\": \"Delete\",\n \"loading\": \"Loading...\",\n \"backToList\": \"← Back\",\n \"errorLoad\": \"Failed to load. Please try again.\",\n \"errorSubmit\": \"Failed to submit. Please try again.\",\n \"prevPage\": \"← Prev\",\n \"nextPage\": \"Next →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"We could not check your review status. Please try again later.\",\n \"ratingRequiredError\": \"Please choose a rating before submitting.\",\n \"saveError\": \"We could not save your review. Please try again.\",\n \"eyebrow\": \"Review FreeLingo\",\n \"title\": \"How was your experience?\",\n \"closeLabel\": \"Close review prompt\",\n \"checking\": \"Checking review status...\",\n \"ratingLabel\": \"Rating required\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"star\",\n \"stars\": \"stars\",\n \"commentLabel\": \"Comment optional\",\n \"commentPlaceholder\": \"Tell us what helped you learn.\",\n \"cancel\": \"Cancel\",\n \"submit\": \"Submit\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Learner stories\",\n \"title\": \"Learning feels more real when you tell it yourself\",\n \"subtitle\": \"Reviews from students already practicing with Lingu on FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# total review} other {# total reviews}}\",\n \"learningLanguage\": \"Learning {language}\",\n \"starsLabel\": \"{rating} out of 5 stars\",\n \"ratingOnly\": \"Verified FreeLingo rating.\"\n },\n \"adminReviews\": {\n \"title\": \"Reviews\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtered\",\n \"approvedOnPage\": \"Approved on page\",\n \"pendingOnPage\": \"Pending on page\",\n \"filters\": \"Filters\",\n \"approvalFilter\": \"Approval filter\",\n \"allReviews\": \"All reviews\",\n \"pending\": \"Pending\",\n \"approved\": \"Approved\",\n \"ratingFilter\": \"Rating filter\",\n \"allRatings\": \"All ratings\",\n \"starsOption\": \"{rating} stars\",\n \"clear\": \"Clear\",\n \"loadError\": \"Failed to load reviews.\",\n \"updateError\": \"Failed to update review.\",\n \"deleteError\": \"Failed to delete review.\",\n \"loading\": \"Loading reviews...\",\n \"queue\": \"Review queue\",\n \"total\": \"{total} total\",\n \"empty\": \"No reviews found.\",\n \"starsLabel\": \"{rating} stars\",\n \"learningLanguage\": \"Learning {language}\",\n \"ratingOnly\": \"Rating-only review.\",\n \"unapprove\": \"Unapprove\",\n \"approve\": \"Approve\",\n \"delete\": \"Delete\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"deleteTitle\": \"Delete review\",\n \"deleteMessage\": \"Delete this review? This action cannot be undone.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"Under Maintenance\",\n \"description\": \"This section is temporarily unavailable while we perform maintenance. Please check back later.\"\n }\n}\n"}}, "messages/pl.json": {"971f98205441f1c948de59b548acdf078929e151": {"t": 1785745290.011171, "n": 80734, "h": "51f69db56b97c253", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt przez formularz kontaktowy na freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami przez formularz kontaktowy na freelingo.app.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"freemiumTrialTitle\": \"Twój darmowy okres próbny się rozpoczął\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do wszystkich funkcji przez 7 dni. Bez karty. Przejdź na Premium w dowolnym momencie z panelu.\",\n \"freemiumChatLabel\": \"Czat z tutorem AI\",\n \"freemiumVoiceLabel\": \"Rozmowy głosowe\",\n \"freemiumListeningLabel\": \"Ćwiczenia ze słuchu\",\n \"freemiumReadingLabel\": \"Ćwiczenia z czytania\",\n \"goToDashboard\": \"Przejdź do panelu\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceling\": \"Anulowanie\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.27\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}"}, "fef25a604bab60de9e99ff4f5ff38bf0e988d624": {"t": 1785749548.969539, "n": 80734, "h": "51f69db56b97c253", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt przez formularz kontaktowy na freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami przez formularz kontaktowy na freelingo.app.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"freemiumTrialTitle\": \"Twój darmowy okres próbny się rozpoczął\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do wszystkich funkcji przez 7 dni. Bez karty. Przejdź na Premium w dowolnym momencie z panelu.\",\n \"freemiumChatLabel\": \"Czat z tutorem AI\",\n \"freemiumVoiceLabel\": \"Rozmowy głosowe\",\n \"freemiumListeningLabel\": \"Ćwiczenia ze słuchu\",\n \"freemiumReadingLabel\": \"Ćwiczenia z czytania\",\n \"goToDashboard\": \"Przejdź do panelu\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceling\": \"Anulowanie\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.27\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}"}, "f2eceecd45410092fb317ead6d1b5d0071042a52": {"t": 1785749550.396208, "n": 80952, "h": "5071cd4db3dbdbcd", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"freemiumTrialTitle\": \"Twój darmowy okres próbny się rozpoczął\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do wszystkich funkcji przez 7 dni. Bez karty. Przejdź na Premium w dowolnym momencie z panelu.\",\n \"freemiumChatLabel\": \"Czat z tutorem AI\",\n \"freemiumVoiceLabel\": \"Rozmowy głosowe\",\n \"freemiumListeningLabel\": \"Ćwiczenia ze słuchu\",\n \"freemiumReadingLabel\": \"Ćwiczenia z czytania\",\n \"goToDashboard\": \"Przejdź do panelu\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceling\": \"Anulowanie\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.26\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}"}, "1e8ddfdc904ccfdff96926cdb18123cb7aeaf631": {"t": 1785749552.9553566, "n": 80953, "h": "11f08854144763b2", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"freemiumTrialTitle\": \"Twój darmowy okres próbny się rozpoczął\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do wszystkich funkcji przez 7 dni. Bez karty. Przejdź na Premium w dowolnym momencie z panelu.\",\n \"freemiumChatLabel\": \"Czat z tutorem AI\",\n \"freemiumVoiceLabel\": \"Rozmowy głosowe\",\n \"freemiumListeningLabel\": \"Ćwiczenia ze słuchu\",\n \"freemiumReadingLabel\": \"Ćwiczenia z czytania\",\n \"goToDashboard\": \"Przejdź do panelu\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceling\": \"Anulowanie\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "70294dcef45ed11471317dabb8d84ca897cbeb09": {"t": 1785749554.516354, "n": 80996, "h": "8c8700478e6a5bb6", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"freemiumTrialTitle\": \"Twój darmowy okres próbny się rozpoczął\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do wszystkich funkcji przez 7 dni — bez karty. Przejdź na Premium w dowolnym momencie z panelu.\",\n \"freemiumChatLabel\": \"Czat z tutorem AI\",\n \"freemiumVoiceLabel\": \"Rozmowy głosowe\",\n \"freemiumListeningLabel\": \"Ćwiczenia ze słuchu\",\n \"freemiumReadingLabel\": \"Ćwiczenia z czytania\",\n \"goToDashboard\": \"Przejdź do panelu\",\n \"upgradeLater\": \"Przejdź na Premium\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceling\": \"Anulowanie\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "0d6ad1821bcc89a6c6a70efa15344b821d8799bc": {"t": 1785749556.4797144, "n": 80488, "h": "509750ce0e137dbb", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceling\": \"Anulowanie\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "d8820fe857733e2dbd0d23e274a3d8d917e4367c": {"t": 1785749558.4964137, "n": 80451, "h": "23fe9ce5ba40bd92", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Czat z korepetytorem\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowa\",\n \"toggleSidebarShow\": \"Pokaż czaty\",\n \"toggleSidebarHide\": \"Ukryj czaty\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "3065af1846e36fa2534543c08aaed7ba654d353e": {"t": 1785749560.072281, "n": 80367, "h": "4298fe1cc6b6cfa2", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Nieograniczony dostęp — bez dziennych i tygodniowych limitów\",\n \"feature2\": \"2 miesiące za darmo\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\",\n \"l1\": \"Czat z tutorem AI\",\n \"l2\": \"Rozmowy głosowe\",\n \"l3\": \"Ćwiczenia ze słuchu\",\n \"l4\": \"Ćwiczenia z czytania\",\n \"l5\": \"7 dni pełnego dostępu\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"7 dni pełnego dostępu testowego, potem za darmo z dziennymi i tygodniowymi limitami\",\n \"planFreeCta\": \"Zacznij\",\n \"limitedLabel\": \"Limitowane\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "ebf966c2a4c19f294d1727adf4f74e1a26da7e4f": {"t": 1785749561.4626906, "n": 80195, "h": "4e39dc212cd057f2", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"freemiumVoiceRemaining\": \"Darmowy głos: {remaining}/{limit} min w tym tygodniu\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "8568bb1c72cb7373bec4b9ac11f0a7ac6d71d2b6": {"t": 1785749563.0677786, "n": 80109, "h": "821991e06cecba1a", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, z darmowym planem i płatnymi subskrypcjami. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo oferuje darmowy plan z limitami użytkowania oraz płatne subskrypcje na nielimitowany dostęp, dostępne w cyklu miesięcznym lub rocznym. Darmowy plan obejmuje 7-dniowy okres próbny z pełnym dostępem (bez podawania metody płatności), a następnie ograniczone dzienne limity na lekcje i czat AI oraz tygodniowe limity na ćwiczenia ze słuchania, czytania i rozmowy głosowe. Płatne subskrypcje znoszą wszystkie limity użytkowania tych funkcji. W usłudze hostowanej Twoje dane są przechowywane na serwerach zarządzanych przez zespół FreeLingo. Aktualne limity użytkowania Twojego konta są dostępne na pulpicie nawigacyjnym.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Darmowy plan obejmuje ograniczony dostęp do funkcji AI z 7-dniowym okresem próbnym z pełnym dostępem dla nowych użytkowników (bez podawania metody płatności). Płatne subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci planu płatnego otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"freemiumTrialDesc\": \"Ciesz się nieograniczonym dostępem do czatu, głosu, listeningu i readingu. Wypróbuj wszystko Premium za darmo.\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallLessonsTitle\": \"Odblokuj nielimitowane lekcje\",\n \"paywallLessonsDesc\": \"Gramatyka, słownictwo, czytanie i pisanie — kończ tyle lekcji, ile chcesz każdego dnia.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lekcje\",\n \"listeningLabel\": \"Słuchanie\",\n \"readingLabel\": \"Czytanie\",\n \"voiceLabel\": \"Głos (min)\",\n \"freeLimit\": \"Kup Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# dzień bezpłatnego okresu próbnego} other {# dni bezpłatnego okresu próbnego}}\",\n \"trialUnlimited\": \"Nieograniczony dostęp\",\n \"requiresSubscription\": \"Tylko Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Wypróbuj wszystko za darmo\",\n \"desc\": \"Możesz teraz rozmawiać z Lingu, ćwiczyć słuchanie i czytanie oraz wypróbować konwersacje głosowe bez podawania danych płatności. Zacznij od bezpłatnego okresu próbnego, a następnie korzystaj ze wszystkich funkcji z dziennymi i tygodniowymi limitami. Przejdź na Premium w dowolnym momencie z panelu.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "0904e8a0ea95d836f14b581eb25c06c6bd1bff57": {"t": 1785749564.6089325, "n": 78890, "h": "8395c749b0054a49", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.24\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Nieprzeczytane powiadomienia z feedbacku\",\n \"desc\": \"Feedback pokazuje teraz mały licznik nieprzeczytanych elementów w menu bocznym, więc zobaczysz nowe sugestie, błędy i odpowiedzi bez dodatkowych e-maili. Otwarcie wątku feedbacku oznacza jako przeczytany tylko ten wątek.\"\n },\n \"entry2\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry3\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "3b84164d91d4640be5e0e01f3f356f20d8b0c65e": {"t": 1785749566.3111367, "n": 78890, "h": "020933d33f1046a8", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"system\": \"System\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Nieprzeczytane powiadomienia z feedbacku\",\n \"desc\": \"Feedback pokazuje teraz mały licznik nieprzeczytanych elementów w menu bocznym, więc zobaczysz nowe sugestie, błędy i odpowiedzi bez dodatkowych e-maili. Otwarcie wątku feedbacku oznacza jako przeczytany tylko ten wątek.\"\n },\n \"entry2\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry3\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "ec43166c2232a67e76c890e328ae1ec47eaa6a02": {"t": 1785749567.8382616, "n": 78866, "h": "fe2cff4bf3bcc908", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Nieprzeczytane powiadomienia z feedbacku\",\n \"desc\": \"Feedback pokazuje teraz mały licznik nieprzeczytanych elementów w menu bocznym, więc zobaczysz nowe sugestie, błędy i odpowiedzi bez dodatkowych e-maili. Otwarcie wątku feedbacku oznacza jako przeczytany tylko ten wątek.\"\n },\n \"entry2\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry3\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "c84f9a5120125194068516d71aabf9519eff65e9": {"t": 1785749569.382502, "n": 78866, "h": "bdda82250bd6b52f", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.22\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Nieprzeczytane powiadomienia z feedbacku\",\n \"desc\": \"Feedback pokazuje teraz mały licznik nieprzeczytanych elementów w menu bocznym, więc zobaczysz nowe sugestie, błędy i odpowiedzi bez dodatkowych e-maili. Otwarcie wątku feedbacku oznacza jako przeczytany tylko ten wątek.\"\n },\n \"entry2\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry3\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"unread\": \"Nieprzeczytane\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "36048aeecf912987df36d7b254d1da1e4395e742": {"t": 1785749570.8051038, "n": 78834, "h": "149d2db4b4e25603", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.21\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Nieprzeczytane powiadomienia z feedbacku\",\n \"desc\": \"Feedback pokazuje teraz mały licznik nieprzeczytanych elementów w menu bocznym, więc zobaczysz nowe sugestie, błędy i odpowiedzi bez dodatkowych e-maili. Otwarcie wątku feedbacku oznacza jako przeczytany tylko ten wątek.\"\n },\n \"entry2\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry3\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "8c3d07b127cbbfa151f285b9f0231d8c268b0f80": {"t": 1785749572.4404263, "n": 78515, "h": "53946ce9dd9cb289", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.20\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry2\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "8e7d77f0369a67a972b41d2156c3cad3a0427256": {"t": 1785749573.9839292, "n": 79342, "h": "3530086afbc56597", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.20\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Darmowa demo głosowe po ocenie\",\n \"desc\": \"Po utworzeniu planu nauki możesz bezpłatnie wypróbować 5-minutową rozmowę głosową w czasie rzeczywistym z Lingu. Po zakończeniu demo Premium odblokowuje pełną praktykę mówienia i pozostałe tryby prowadzone.\"\n },\n \"entry2\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry3\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry4\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry5\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "e17ab023ab6e65310c9e7d9ccf51ac7555e226c4": {"t": 1785749575.5746737, "n": 78470, "h": "8b77e167cffaf16d", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_resources\": \"Czym są Zasoby?\",\n \"a_resources\": \"Sekcja Zasoby zawiera materiały referencyjne niezależne od Twojego planu nauki: gramatykę według poziomu, zestawy słownictwa i przydatne zwroty. Możesz korzystać z niej w dowolnym momencie, aby powtarzać, sprawdzać wyjaśnienia lub poszerzać słownictwo bez czekania na codzienną lekcję.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "bba0316c5c98a99dac52653c404635a16445d58f": {"t": 1785749576.9939506, "n": 78063, "h": "8eec9338e15539d4", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusUnpaid\": \"Nieopłacona\",\n \"statusPaused\": \"Wstrzymana\",\n \"statusIncomplete\": \"Płatność oczekuje\",\n \"statusIncompleteExpired\": \"Płatność wygasła\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "462756c9f11407bfbf9cdee76297b1d2004e86d0": {"t": 1785749578.439473, "n": 77898, "h": "20db8fa5ae09e5af", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successCheckingLabel\": \"Potwierdzanie subskrypcji\",\n \"successCheckingTitle\": \"Sprawdzamy subskrypcję\",\n \"successCheckingDesc\": \"Zwykle zajmuje to kilka sekund.\",\n \"successPendingLabel\": \"Prawie gotowe\",\n \"successPendingTitle\": \"Twoja subskrypcja jest potwierdzana\",\n \"successPendingDesc\": \"Dostęp Premium powinien być wkrótce dostępny. Jeśli nie, sprawdź ustawienia rozliczeń.\",\n \"successErrorLabel\": \"Potwierdzenie oczekuje\",\n \"successErrorTitle\": \"Nie udało się jeszcze zweryfikować subskrypcji\",\n \"successErrorDesc\": \"Przejdź do panelu i odśwież za chwilę albo sprawdź ustawienia rozliczeń.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "0fbf6f5f18c82899aff8ac2c064ce7aea23cf877": {"t": 1785749580.0156674, "n": 77273, "h": "109d1b7000fd3d1f", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\",\n \"premiumBannerPastDueTitle\": \"Płatność oczekuje\",\n \"premiumBannerPastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium do czatu, rozmów głosowych, reading i listening.\",\n \"premiumBannerPastDueCta\": \"Przywróć Premium\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"updatePayment\": \"Zaktualizuj płatność\",\n \"pastDueTitle\": \"Płatność oczekuje\",\n \"pastDueDesc\": \"Zaktualizuj metodę płatności, aby przywrócić dostęp Premium.\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "24a06f5e50b0db5de9ada184b37575ef436b7304": {"t": 1785749581.579242, "n": 76855, "h": "798583c1e4214388", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"Link zaproszenia\",\n \"createUserBtn\": \"Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.18\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "853f31e8f535c69e56e9b5f4a354706d0daeb0a2": {"t": 1785749582.9872253, "n": 76872, "h": "e3fca60ba27bd0cc", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"regenerateExercise\": \"Wygeneruj ćwiczenie ponownie\",\n \"regeneratingExercise\": \"Generowanie...\",\n \"regenerateError\": \"Nie udało się wygenerować ćwiczenia ponownie. Spróbuj jeszcze raz.\",\n \"regenerateNotNeeded\": \"To ćwiczenie nie wymaga ponownego generowania.\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.18\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "5564d600b59d38e2410ee739d678073083a2080f": {"t": 1785749584.5602615, "n": 76597, "h": "93b497a587e32577", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.17\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}"}, "040d66f05778ba7c881763af0dd81d5d01ba15a6": {"t": 1785749586.1416328, "n": 76598, "h": "21905b544547cd66", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerDescTrialUsed\": \"Aktywuj Premium, aby odblokować czat z Lingu, rozmowy głosowe, reading i listening.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\",\n \"premiumBannerCtaTrialUsed\": \"Zobacz plany\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialTitleTrialUsed\": \"Aktywuj FreeLingo Premium\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialDescTrialUsed\": \"Wybierz plan, aby odblokować Lingu, ćwiczenia głosowe, listening i reading.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaMonthlyTrialUsed\": \"Elastycznie co miesiąc · {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialCtaYearlyTrialUsed\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialNoChargeTrialUsed\": \"Sprawdź kwotę przed subskrypcją. Anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallDescTrialUsed\": \"Odblokuj wszystkie tryby Premium i sprawdź kwotę przed potwierdzeniem.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallNoChargeTrialUsed\": \"Bezpieczna płatność · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"pricingDescTrialUsed\": \"Wybierz miesięcznie lub rocznie · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"ctaRegisterTrialUsed\": \"Wybierz plan\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"W tej sesji nie pobrano opłat · wybierz plan w dowolnym momencie\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "be4bf883c5e7363d8ff530f1ed41f610dabe0bf4": {"t": 1785749587.7502337, "n": 75906, "h": "31719111af773f48", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingLabel\": \"Cena\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"ctaStart\": \"Rozpocznij bezpłatny okres próbny na {days} dni\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"everythingFree\": \"Wszystko zawarte w planie darmowym, plus:\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Twój darmowy okres próbny jest nadal dostępny\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Twój postęp jest bezpieczny, a plan możesz wybrać później w ustawieniach.\",\n \"canceledCtaRetry\": \"Ponów darmowy okres próbny · {plan}\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Zobacz plany\",\n \"canceledNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreePriceLabel\": \"Darmowe\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "3362c05bbad238dae72a78b4e5b0643244a1227d": {"t": 1785749589.1453693, "n": 75945, "h": "3f774d49aa0ec71b", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Odblokuj rozmowy, listening i reading\",\n \"premiumBannerDesc\": \"Zacznij od darmowego okresu próbnego i ćwicz z Lingu przez tekst, głos oraz ćwiczenia dopasowane do poziomu.\",\n \"premiumBannerCta\": \"Darmowy okres próbny\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialTitle\": \"Zacznij od {days} dni za darmo\",\n \"trialDesc\": \"Uzyskaj dostęp do Lingu, ćwiczeń głosowych, słuchania i czytania przed pierwszą płatnością.\",\n \"trialCtaMonthly\": \"Wypróbuj za darmo, potem {price}€/mies.\",\n \"trialCtaYearly\": \"Wypróbuj za darmo, potem {price}€/rok · 2 miesiące gratis\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Dzisiaj bez opłat. Karta wymagana, anuluj kiedy chcesz.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni i odblokuj wszystkie tryby Premium przed pierwszą płatnością.\",\n \"paywallChatTitle\": \"Ćwicz z Lingu bez limitów\",\n \"paywallChatDesc\": \"Zadawaj pytania, otrzymuj poprawki i prowadź naturalne rozmowy tekstowe z tutorem AI.\",\n \"paywallConversationTitle\": \"Rozmawiaj z Lingu w czasie rzeczywistym\",\n \"paywallConversationDesc\": \"Ćwicz mówienie z transkrypcją, szybkimi odpowiedziami i feedbackiem, aby budować płynność.\",\n \"paywallListeningTitle\": \"Trenuj słuch na swoim poziomie\",\n \"paywallListeningDesc\": \"Słuchaj ćwiczeń generowanych przez AI i dopasowanych do postępów, z natychmiastową oceną zrozumienia.\",\n \"paywallReadingTitle\": \"Czytaj teksty dopasowane do postępów\",\n \"paywallReadingDesc\": \"Poprawiaj rozumienie tekstu z materiałami na poziomie, pytaniami i natychmiastowym feedbackiem.\",\n \"paywallNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Nie teraz\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"Elastycznie co miesiąc · {price}€/miesiąc →\",\n \"planYearly\": \"Najlepsza oferta · {price}€/rok · 2 miesiące gratis →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingLabel\": \"Cena\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"{days} dni gratis · dzisiaj bez opłat · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"ctaStart\": \"Rozpocznij bezpłatny okres próbny na {days} dni\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"Darmowy okres próbny\",\n \"ctaRegister\": \"Rozpocznij darmowy okres próbny\",\n \"everythingFree\": \"Wszystko zawarte w planie darmowym, plus:\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Twój darmowy okres próbny jest nadal dostępny\",\n \"canceledDesc\": \"Nie pobrano żadnych opłat. Możesz ponowić Checkout i uzyskać dostęp do Lingu, głosu, słuchania i czytania przed pierwszą płatnością.\",\n \"canceledCtaRetry\": \"Ponów darmowy okres próbny · {plan}\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Przejdź do ustawień\",\n \"canceledNoCharge\": \"Dzisiaj bez opłat · karta wymagana · anuluj kiedy chcesz\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreePriceLabel\": \"Darmowe\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "172e172291f0e761118e96140faa58571f82969a": {"t": 1785749590.7290423, "n": 74836, "h": "80d7a73dae3bc990", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"cardProfileAccess\": \"Profil i dostęp\",\n \"cardSessionSecurity\": \"Sesja i bezpieczeństwo\",\n \"cardTheme\": \"Motyw\",\n \"cardConversationTiming\": \"Czas rozmowy\",\n \"cardTutorVoice\": \"Głos tutora\",\n \"cardCurrentUsage\": \"Bieżące użycie\",\n \"cardProductReview\": \"Recenzja produktu\",\n \"cardCreatedBy\": \"Utworzone przez\",\n \"cardLegalDocuments\": \"Dokumenty prawne\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Ćwicz więcej z FreeLingo Premium\",\n \"premiumBannerDesc\": \"Uzyskaj dostęp do Reading, Listening, czatu z Lingu i rozmów głosowych.\",\n \"premiumBannerCta\": \"Zobacz plany →\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialTitle\": \"{days} dni pełnego dostępu\",\n \"trialDesc\": \"Czat z tutorem AI, rozmowy głosowe, ćwiczenia ze słuchu i czytania. Bez zobowiązań, anuluj w dowolnym momencie.\",\n \"trialCtaMonthly\": \"Zacznij od {price}€/mies.\",\n \"trialCtaYearly\": \"Zacznij od {price}€/rok\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Karta wymagana. Brak opłat do końca okresu próbnego.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni, bez opłat dzisiaj. Anuluj kiedy chcesz.\",\n \"paywallNoCharge\": \"Karta wymagana · brak opłat do końca okresu próbnego · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"— Zacznij za {price}€/miesiąc →\",\n \"planYearly\": \"— Zacznij za {price}€/rok →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingLabel\": \"Cena\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"7 dni gratis z subskrypcją · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"ctaStart\": \"Rozpocznij bezpłatny okres próbny na {days} dni\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"7 dni gratis\",\n \"ctaRegister\": \"Zacznij teraz\",\n \"everythingFree\": \"Wszystko zawarte w planie darmowym, plus:\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Możesz subskrybować w dowolnym momencie. Twój postęp i ustawienia są nienaruszone.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Przejdź do ustawień\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreePriceLabel\": \"Darmowe\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "9799a499a3e4f9ece459394c1e49459d081fb57b": {"t": 1785749592.2951794, "n": 74456, "h": "0d117b3451c3afb4", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Ćwicz więcej z FreeLingo Premium\",\n \"premiumBannerDesc\": \"Uzyskaj dostęp do Reading, Listening, czatu z Lingu i rozmów głosowych.\",\n \"premiumBannerCta\": \"Zobacz plany →\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"hint\": \"Wskazówka\",\n \"showNativeHint\": \"Pokaż wskazówkę w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialTitle\": \"{days} dni pełnego dostępu\",\n \"trialDesc\": \"Czat z tutorem AI, rozmowy głosowe, ćwiczenia ze słuchu i czytania. Bez zobowiązań, anuluj w dowolnym momencie.\",\n \"trialCtaMonthly\": \"Zacznij od {price}€/mies.\",\n \"trialCtaYearly\": \"Zacznij od {price}€/rok\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Karta wymagana. Brak opłat do końca okresu próbnego.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni, bez opłat dzisiaj. Anuluj kiedy chcesz.\",\n \"paywallNoCharge\": \"Karta wymagana · brak opłat do końca okresu próbnego · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"— Zacznij za {price}€/miesiąc →\",\n \"planYearly\": \"— Zacznij za {price}€/rok →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingLabel\": \"Cena\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"7 dni gratis z subskrypcją · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"ctaStart\": \"Rozpocznij bezpłatny okres próbny na {days} dni\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"7 dni gratis\",\n \"ctaRegister\": \"Zacznij teraz\",\n \"everythingFree\": \"Wszystko zawarte w planie darmowym, plus:\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Możesz subskrybować w dowolnym momencie. Twój postęp i ustawienia są nienaruszone.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Przejdź do ustawień\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreePriceLabel\": \"Darmowe\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "f922bb72c8274ae00cbc24d6b78011b6e52eb03e": {"t": 1785749594.6912549, "n": 74388, "h": "ab449c0da11a36c0", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Ćwicz więcej z FreeLingo Premium\",\n \"premiumBannerDesc\": \"Uzyskaj dostęp do Reading, Listening, czatu z Lingu i rozmów głosowych.\",\n \"premiumBannerCta\": \"Zobacz plany →\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialTitle\": \"{days} dni pełnego dostępu\",\n \"trialDesc\": \"Czat z tutorem AI, rozmowy głosowe, ćwiczenia ze słuchu i czytania. Bez zobowiązań, anuluj w dowolnym momencie.\",\n \"trialCtaMonthly\": \"Zacznij od {price}€/mies.\",\n \"trialCtaYearly\": \"Zacznij od {price}€/rok\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Karta wymagana. Brak opłat do końca okresu próbnego.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni, bez opłat dzisiaj. Anuluj kiedy chcesz.\",\n \"paywallNoCharge\": \"Karta wymagana · brak opłat do końca okresu próbnego · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"— Zacznij za {price}€/miesiąc →\",\n \"planYearly\": \"— Zacznij za {price}€/rok →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingLabel\": \"Cena\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"7 dni gratis z subskrypcją · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"ctaStart\": \"Rozpocznij bezpłatny okres próbny na {days} dni\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"7 dni gratis\",\n \"ctaRegister\": \"Zacznij teraz\",\n \"everythingFree\": \"Wszystko zawarte w planie darmowym, plus:\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Możesz subskrybować w dowolnym momencie. Twój postęp i ustawienia są nienaruszone.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Przejdź do ustawień\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreePriceLabel\": \"Darmowe\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}, "46d8bff56906fae0a7e4e9fecea96a283aeba7a3": {"t": 1785749596.6756654, "n": 74388, "h": "e084117daf5d9b1f", "c": "{\n \"landing\": {\n \"hero\": \"Ucz się języków z prawdziwym partnerem do rozmowy głosowej\",\n \"heroSub\": \"Mów. Słuchaj. Rozwijaj się.\",\n \"signIn\": \"Zaloguj się\",\n \"dashboard\": \"Kontynuuj\",\n \"feature1Title\": \"Plan nauki\",\n \"feature1Desc\": \"Ocena poziomu + tygodniowy plan od A1 do C2. Lekcje odblokowywane po kolei, we własnym tempie.\",\n \"feature2Title\": \"Korepetytor AI\",\n \"feature2Desc\": \"Ćwicz z lekcjami, ćwiczeniami i fiszkami pod kierunkiem korepetytora. Informacje zwrotne na każdym kroku.\",\n \"feature3Title\": \"Rozmowa głosowa\",\n \"feature3Desc\": \"Rozmawiaj z korepetytorem w czasie rzeczywistym. Aktywacja głosem, natychmiastowa odpowiedź.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Ćwiczenia generowane przez AI na Twoim poziomie CEFR. Słuchaj fragmentu i odpowiedz na 5 pytań ze zrozumienia, następnie odblokuj transkrypcję — lub czytaj tekst i odpowiadaj bezpośrednio. Nowe ćwiczenia na żądanie.\",\n \"feature5Title\": \"Fiszki\",\n \"feature5Desc\": \"Powtarzanie słownictwa metodą spaced repetition. Algorytm SM-2 planuje każdą kartę w optymalnym momencie, aby zmaksymalizować długoterminowe zapamiętywanie.\",\n \"feature6Title\": \"Postęp i serie\",\n \"feature6Desc\": \"XP, codzienne serie, wyniki umiejętności i kompetencje jednostkowe. Śledź swój rozwój tydzień po tygodniu i testuj poziom na końcu każdego etapu CEFR.\",\n \"footer\": \"Open source · Hostuj samodzielnie za darmo lub subskrybuj usługę hostowaną\",\n \"navFeatures\": \"Funkcje\",\n \"navReviews\": \"Recenzje\",\n \"navPricing\": \"Ceny\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Jak to działa\",\n \"faqTitle\": \"Często zadawane pytania\",\n \"terms\": \"Regulamin\",\n \"privacy\": \"Prywatność\",\n \"contact\": \"Kontakt\",\n \"aboutMe\": \"O mnie\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produkt\",\n \"footerLegal\": \"Prawne\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Ładowanie...\",\n \"error\": \"Błąd\",\n \"save\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"cancel\": \"Anuluj\",\n \"back\": \"Wstecz\",\n \"done\": \"Gotowe\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij\",\n \"start\": \"Rozpocznij\",\n \"retry\": \"Spróbuj ponownie\",\n \"or\": \"lub\",\n \"appName\": \"FreeLingo\",\n \"days\": \"dni\",\n \"logout\": \"Wyloguj\",\n \"logoutConfirmTitle\": \"Wyloguj się\",\n \"logoutConfirmMessage\": \"Czy na pewno chcesz się wylogować?\",\n \"initializing\": \"Inicjalizowanie...\",\n \"clearFilters\": \"Wyczyść filtry\",\n \"all\": \"Wszystkie\",\n \"score\": \"Wynik\",\n \"complete\": \"Ukończono\",\n \"checking\": \"Sprawdzanie...\",\n \"backToDashboard\": \"Wróć do panelu\",\n \"tagline\": \"Nauka języków z AI\",\n \"close\": \"Zamknij\",\n \"verifyEmailBanner\": \"Prosimy o potwierdzenie adresu e-mail w celu dokończenia konfiguracji konta.\",\n \"verifyEmailSent\": \"Wiadomość wysłana. Sprawdź swoją skrzynkę odbiorczą.\",\n \"resendVerification\": \"Wyślij ponownie e-mail weryfikacyjny\",\n \"saveWord\": \"Zapisz\",\n \"wordSaved\": \"Zapisano\",\n \"wordSaveError\": \"Wystąpił problem\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\",\n \"noActivePlan\": \"Nie znaleziono aktywnego planu nauki\",\n \"removeLanguageConfirmTitle\": \"Usuń język\",\n \"removeLanguageConfirmMessage\": \"Wszystkie dane dla tego języka (plan nauki, postępy, fiszki, konwersacje i wspomnienia) zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeLanguageConfirmLabel\": \"Usuń\",\n \"nativeHelpTitle\": \"Pomoc w języku {language}\",\n \"nativeHelpLoading\": \"Przygotowuję pomoc w języku {language}...\",\n \"nativeHelpShow\": \"Pokaż pomoc w języku {language}\",\n \"nativeHelpKeyPoints\": \"Kluczowe punkty\",\n \"nativeHelpCommonTraps\": \"Częste pułapki\",\n \"nativeHelpMiniGlossary\": \"Mini słowniczek\",\n \"nativeHelpUsageTips\": \"Wskazówki użycia\",\n \"nativeHelpRegisterNotes\": \"Rejestr\",\n \"nativeHelpPhraseNotes\": \"Notatki do zwrotów\",\n \"nativeHelpStudyTips\": \"Wskazówki do nauki\",\n \"nativeHelpWordNotes\": \"Notatki do słów\",\n \"nativeHelpPractice\": \"Ćwiczenie\"\n },\n \"nav\": {\n \"home\": \"Strona główna\",\n \"myPlan\": \"Mój plan\",\n \"progress\": \"Postępy\",\n \"flashcards\": \"Fiszki\",\n \"tutor\": \"Korepetytor\",\n \"assessment\": \"Ocena poziomu\",\n \"resources\": \"Zasoby\",\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"phrasebook\": \"Rozmówki\",\n \"settings\": \"Ustawienia\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Kontakt\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzje\",\n \"switchLanguage\": \"Zmień język\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Zaloguj się\",\n \"subtitle\": \"Witaj ponownie\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"submit\": \"Zaloguj się\",\n \"noAccount\": \"Nie masz konta?\",\n \"register\": \"Zarejestruj się\",\n \"error\": \"Nieprawidłowy e-mail lub hasło\",\n \"emailRequired\": \"Wprowadź adres e-mail\",\n \"passwordRequired\": \"Wprowadź hasło\",\n \"loginFailed\": \"Logowanie nie powiodło się\",\n \"signingIn\": \"Logowanie...\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"accountCreated\": \"Konto utworzone. Możesz się teraz zalogować\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"forgotPassword\": \"Zapomniałeś hasła?\"\n },\n \"register\": {\n \"title\": \"Utwórz konto\",\n \"subtitle\": \"Zacznij się uczyć\",\n \"username\": \"Nazwa użytkownika\",\n \"email\": \"E-mail\",\n \"password\": \"Hasło\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"inviteToken\": \"Kod zaproszenia\",\n \"inviteTokenPlaceholder\": \"Wprowadź kod zaproszenia\",\n \"submit\": \"Utwórz konto\",\n \"hasAccount\": \"Masz już konto?\",\n \"login\": \"Zaloguj się\",\n \"registrationClosed\": \"Rejestracja jest zamknięta. Potrzebujesz kodu zaproszenia.\",\n \"error\": \"Rejestracja nie powiodła się\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"showPassword\": \"Pokaż hasło\",\n \"hidePassword\": \"Ukryj hasło\",\n \"displayNamePlaceholder\": \"Taka sama jak nazwa użytkownika, jeśli puste\",\n \"inviteActive\": \"Zaproszenie aktywne\",\n \"creatingAccount\": \"Tworzenie...\",\n \"invalidEmail\": \"Wprowadź prawidłowy adres e-mail\",\n \"usernameTaken\": \"Nazwa użytkownika jest już zajęta\",\n \"emailTaken\": \"Adres e-mail jest już zarejestrowany\",\n \"invalidInvite\": \"Nieprawidłowy lub wygasły kod zaproszenia\",\n \"termsAccept\": \"Przeczytałem(-am) i akceptuję\",\n \"termsLink\": \"Regulamin\",\n \"andWord\": \"oraz\",\n \"privacyLink\": \"Politykę prywatności\",\n \"termsRequired\": \"Musisz zaakceptować regulamin, aby kontynuować\",\n \"invalidPassword\": \"Hasło musi mieć od 10 do 25 znaków i zawierać co najmniej jedną wielką literę, cyfrę i symbol\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\"\n },\n \"verifyEmail\": {\n \"title\": \"Weryfikacja e-mail\",\n \"loading\": \"Weryfikacja...\",\n \"success\": \"Twój e-mail został zweryfikowany. Możesz się teraz zalogować.\",\n \"error\": \"Nieprawidłowy lub wygasły link weryfikacyjny.\",\n \"goToLogin\": \"Przejdź do logowania\"\n },\n \"forgotPassword\": {\n \"title\": \"Zapomniałem hasła\",\n \"description\": \"Podaj adres e-mail swojego konta, a wyślemy Ci link do zresetowania hasła.\",\n \"emailPlaceholder\": \"twoj@email.pl\",\n \"submit\": \"Wyślij link\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Jeśli ten e-mail jest zarejestrowany, link został wysłany.\",\n \"backToLogin\": \"Powrót do logowania\",\n \"error\": \"Coś poszło nie tak. Spróbuj ponownie.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetowanie hasła\",\n \"newPassword\": \"Nowe hasło\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"submit\": \"Zapisz hasło\",\n \"saving\": \"Zapisywanie...\",\n \"success\": \"Hasło zaktualizowane. Przekierowanie...\",\n \"mismatch\": \"Hasła nie są zgodne\",\n \"tooShort\": \"Hasło musi mieć co najmniej 8 znaków\",\n \"missingToken\": \"Nieprawidłowy link. Poproś o nowe resetowanie.\",\n \"error\": \"Nieprawidłowy lub wygasły link\",\n \"backToLogin\": \"Powrót do logowania\"\n }\n },\n \"settings\": {\n \"title\": \"Ustawienia\",\n \"sectionAccount\": \"Konto\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Zmień zdjęcie\",\n \"avatarRemove\": \"Usuń\",\n \"avatarUploading\": \"Przesyłanie...\",\n \"avatarTypeError\": \"Dozwolone są tylko pliki JPEG i PNG\",\n \"avatarSizeError\": \"Obraz jest za duży (maks. 2 MB)\",\n \"displayName\": \"Wyświetlana nazwa\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Język ojczysty\",\n \"uiLocale\": \"Język interfejsu\",\n \"uiLocaleHint\": \"Zmienia język menu i przycisków. Wymaga przeładowania strony.\",\n \"newPassword\": \"Nowe hasło\",\n \"newPasswordPlaceholder\": \"Zostaw puste, aby zachować\",\n \"confirmPassword\": \"Potwierdź hasło\",\n \"confirmPasswordPlaceholder\": \"Powtórz nowe hasło\",\n \"bio\": \"O sobie (kontekst IA)\",\n \"bioPlaceholder\": \"np. Jestem programistą/ką i często podróżuję służbowo...\",\n \"bioHint\": \"Tutor AI użyje tego do personalizacji rozmów.\",\n \"saveChanges\": \"Zapisz zmiany\",\n \"saving\": \"Zapisywanie...\",\n \"saved\": \"Profil zaktualizowany.\",\n \"passwordMismatch\": \"Hasła nie są zgodne\",\n \"saveFailed\": \"Zapisywanie nie powiodło się\",\n \"logout\": \"Wyloguj\",\n \"sectionAppearance\": \"Wygląd\",\n \"theme\": \"Motyw\",\n \"darkActive\": \"Tryb ciemny aktywny\",\n \"lightActive\": \"Tryb jasny aktywny\",\n \"systemActive\": \"Automatyczny (systemowy)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Ciemny\",\n \"themeLight\": \"Jasny\",\n \"switchToLight\": \"Przełącz na jasny\",\n \"switchToDark\": \"Przełącz na ciemny\",\n \"sectionConversation\": \"Rozmowa\",\n \"conversationMaxDuration\": \"Maks. czas sesji\",\n \"conversationInactivityTimeout\": \"Limit bezczynności\",\n \"min15\": \"15 minut\",\n \"min30\": \"30 minut\",\n \"min1\": \"1 minuta\",\n \"min3\": \"3 minuty\",\n \"min5\": \"5 minut\",\n \"saveConversation\": \"Zapisz\",\n \"conversationSaved\": \"Ustawienia rozmowy zapisane.\",\n \"sectionLegal\": \"Prawne\",\n \"termsOfService\": \"Regulamin\",\n \"privacyPolicy\": \"Polityka prywatności\",\n \"sectionAuthor\": \"Autor\",\n \"authorDescription\": \"Zbudowane przez Arturo Carretero Calvo\",\n \"websiteLink\": \"Strona internetowa\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Kontakt\",\n \"deleteAccount\": \"Usuń konto\",\n \"deleteAccountTitle\": \"Usuń konto\",\n \"deleteAccountMessage\": \"Spowoduje to trwałe usunięcie Twojego konta i wszystkich danych. Tej operacji nie można cofnąć.\",\n \"deleteAccountConfirm\": \"Usuń konto\",\n \"sectionUsageLimits\": \"Limity użytkowania\",\n \"sectionVoice\": \"Głos\",\n \"voiceHint\": \"Wybierz preferowany głos z listy rozwijanej i kliknij odtwarzaj, aby go podejrzeć.\",\n \"voicePlay\": \"Odtwórz\",\n \"voiceStop\": \"Zatrzymaj\",\n \"quotaSessions\": \"Sesje / tydzień\",\n \"quotaMinutesDay\": \"Minuty / dzień\",\n \"quotaMinutesWeek\": \"Minuty / tydzień\",\n \"quotaTokens\": \"Tokeny / miesiąc\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaLoading\": \"Ładowanie...\",\n \"quotaHint\": \"Limity są resetowane co tydzień (sesje i minuty) i co miesiąc (tokeny).\",\n \"sectionMemory\": \"Pamięć\",\n \"memoryEmpty\": \"Nie zapisano jeszcze żadnych wspomnień. Tutor AI będzie zapamiętywał ważne szczegóły o Tobie i zapisywał je tutaj.\",\n \"memoryClearAll\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllTitle\": \"Wyczyść wszystkie wspomnienia\",\n \"memoryClearAllMessage\": \"Spowoduje to trwałe usunięcie wszystkich zapisanych wspomnień. Tej akcji nie można cofnąć.\",\n \"memoryClearAllConfirm\": \"Wyczyść wszystko\",\n \"memoryManage\": \"Zarządzaj wspomnieniami\",\n \"sectionLanguages\": \"Języki\",\n \"languagesManage\": \"Moje języki\",\n \"sectionReview\": \"Recenzja\",\n \"reviewDescription\": \"Podziel się swoim doświadczeniem z FreeLingo. Jeśli edytujesz już zatwierdzoną recenzję, wróci ona do moderacji przed publicznym wyświetleniem.\",\n \"reviewPending\": \"Oczekuje na zatwierdzenie\",\n \"reviewUpdate\": \"Aktualizuj\",\n \"reviewSaved\": \"Recenzja zapisana.\",\n \"reviewDelete\": \"Usuń recenzję\",\n \"reviewDeleteTitle\": \"Usuń recenzję\",\n \"reviewDeleteMessage\": \"Czy chcesz usunąć swoją recenzję? Tej czynności nie można cofnąć.\",\n \"reviewDeleteConfirm\": \"Usuń\",\n \"reviewDeleted\": \"Recenzja usunięta.\",\n \"reviewDeleteError\": \"Nie udało się usunąć recenzji. Spróbuj ponownie.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Regulamin\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. O FreeLingo\",\n \"s1Body\": \"FreeLingo to platforma do nauki języków wspierana przez AI, dostępna w dwóch trybach: (1) samodzielnie hostowana, gdzie uruchamiasz ją na własnej infrastrukturze bezpłatnie, oraz (2) jako usługa hostowana prowadzona przez zespół FreeLingo, dostępna za pośrednictwem płatnej subskrypcji. Korzystając z tej usługi w dowolnym trybie, wyrażasz zgodę na niniejszy Regulamin.\",\n \"s2Title\": \"2. Dopuszczalne użytkowanie\",\n \"s2Intro\": \"Możesz korzystać z FreeLingo wyłącznie do osobistych celów nauki języków. Zgadzasz się nie:\",\n \"s2i1\": \"Próbować uzyskać nieautoryzowanego dostępu do jakiejkolwiek części systemu.\",\n \"s2i2\": \"Przesyłać złośliwych treści ani próbować zakłócać działanie usługi.\",\n \"s2i3\": \"Udostępniać swoich danych logowania stronom trzecim.\",\n \"s2i4\": \"Używać automatycznych skryptów lub botów do nadużywania funkcji korepetytora AI.\",\n \"s3Title\": \"3. Konta użytkowników\",\n \"s3Body\": \"Aby utworzyć konto i korzystać z FreeLingo, musisz mieć ukończone 16 lat. Rejestrując się, potwierdzasz, że spełniasz ten wymóg wiekowy. Jeśli dowiemy się, że konto należy do osoby poniżej 16. roku życia, usuniemy je wraz ze wszystkimi powiązanymi danymi bez powiadomienia. Jesteś odpowiedzialny(-a) za zachowanie poufności swoich danych logowania i za wszelką aktywność na swoim koncie.\",\n \"s4Title\": \"4. Treści i interakcje z AI\",\n \"s4Body\": \"Rozmowy z korepetytorem AI są przechowywane w bazie danych dla ciągłości nauki. W usłudze hostowanej czat AI i funkcje głosowe są przetwarzane za pośrednictwem API OpenAI, a Twoje treści podlegają zasadom użytkowania OpenAI. AI może generować niedokładne odpowiedzi — zawsze stosuj własny osąd. FreeLingo nie ponosi odpowiedzialności za treści generowane przez modele językowe. Treści generowane przez korepetytora AI (ćwiczenia, poprawki, wyjaśnienia i inne materiały) należą do Ciebie do użytku osobistego. FreeLingo nie rości sobie praw własności do Twoich rozmów ani do treści z nich generowanych.\",\n \"s5Title\": \"5. Tryby usługi\",\n \"s5Body\": \"Wdrożenia samodzielnie hostowane są bezpłatne, a operator zachowuje pełną kontrolę nad swoimi danymi i infrastrukturą. Usługa hostowana prowadzona przez zespół FreeLingo jest świadczona w ramach płatnej subskrypcji, dostępnej w cyklu miesięcznym lub rocznym. Usługa hostowana stosuje limity użytkowania dla funkcji tutoringu AI; bieżące zużycie jest dostępne w ustawieniach konta.\",\n \"s6Title\": \"6. Subskrypcja i płatności\",\n \"s6Body\": \"Subskrypcje są dostępne w miesięcznym lub rocznym cyklu rozliczeniowym i odnawiane automatycznie, chyba że zostaną anulowane przed datą odnowienia. Nowi subskrybenci otrzymują bezpłatny okres próbny (wymagane dane płatnicze; żadna opłata nie jest pobierana do końca okresu próbnego). Możesz anulować subskrypcję w dowolnym momencie z ustawień konta, ze skutkiem na koniec bieżącego okresu rozliczeniowego. Jeśli anulujesz w ciągu 14 dni od pierwszej płatności i nie korzystałeś(-aś) z usługi w znaczący sposób, możesz zażądać pełnego zwrotu środków zgodnie z prawem konsumenckim UE. Za niewykorzystany czas nie są wydawane częściowe zwroty poza tym uprawnieniem. Aktualne ceny subskrypcji są wyświetlane podczas realizacji zakupu.\",\n \"s7Title\": \"7. Dostępność\",\n \"s7Body\": \"Usługa jest świadczona bez gwarancji czasu działania. Operator może zawiesić lub zakończyć świadczenie usługi z powodu konserwacji, aktualizacji lub z innego powodu, z rozsądnym wyprzedzeniem tam, gdzie jest to możliwe.\",\n \"s8Title\": \"8. Ograniczenie odpowiedzialności\",\n \"s8Body\": \"FreeLingo i jego współpracownicy nie ponoszą odpowiedzialności za żadne bezpośrednie, pośrednie, przypadkowe ani wtórne szkody wynikające z korzystania lub niemożności korzystania z tej usługi. Zgadzasz się zwolnić FreeLingo i jego współpracowników z odpowiedzialności oraz pokryć wszelkie roszczenia, szkody lub koszty osób trzecich wynikające z korzystania z usługi z naruszeniem niniejszych warunków.\",\n \"s9Title\": \"9. Prawo właściwe\",\n \"s9Body\": \"Niniejszy regulamin podlega prawu Hiszpanii. Wszelkie spory wynikające z niniejszego regulaminu podlegają wyłącznej jurysdykcji sądów Hiszpanii.\",\n \"s10Title\": \"10. Zmiany regulaminu\",\n \"s10Body\": \"Niniejszy regulamin może być aktualizowany w dowolnym momencie. O istotnych zmianach będziemy informować użytkowników za pośrednictwem interfejsu usługi. Dalsze korzystanie z usługi po wprowadzeniu zmian oznacza akceptację zaktualizowanego regulaminu.\",\n \"s11Title\": \"11. Rozdzielność postanowień\",\n \"s11Body\": \"Jeśli którekolwiek postanowienie niniejszego regulaminu zostanie uznane przez właściwy sąd za nieważne lub niewykonalne, postanowienie to zostanie ograniczone lub wyeliminowane w minimalnym niezbędnym zakresie, a pozostałe postanowienia pozostaną w pełnej mocy.\",\n \"linkPrivacy\": \"Polityka prywatności\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\",\n \"linkContact\": \"W sprawach dotyczących niniejszego regulaminu prosimy o kontakt na adres contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Polityka prywatności\",\n \"updated\": \"Ostatnia aktualizacja: czerwiec 2026\",\n \"s1Title\": \"1. Przegląd\",\n \"s1Body\": \"FreeLingo jest dostępny jako aplikacja samodzielnie hostowana i jako usługa hostowana. W przypadku wdrożeń samodzielnie hostowanych wszystkie dane są przechowywane wyłącznie na serwerze operatora, a autorzy projektu FreeLingo nie mają do nich dostępu.\",\n \"s2Title\": \"2. Dane, które zbieramy\",\n \"s2Intro\": \"FreeLingo nie jest skierowany do dzieci poniżej 16. roku życia. Gdy tworzysz konto i korzystasz z FreeLingo, przechowywane są następujące dane:\",\n \"s2i1\": \"Nazwa użytkownika, wyświetlana nazwa i adres e-mail.\",\n \"s2i2\": \"Zahaszowane hasło (bcrypt — Twoje hasło w postaci zwykłego tekstu nigdy nie jest przechowywane).\",\n \"s2i3\": \"Preferencje językowe i ustawienia nauki.\",\n \"s2i4\": \"Opcjonalne zdjęcie profilowe.\",\n \"s2i5\": \"Historia czatu i rozmów z korepetytorem AI.\",\n \"s2i6\": \"Talie fiszek, postęp w nauce i dane powtórek rozłożonych w czasie.\",\n \"s2i7\": \"Wyniki oceny poziomu i postęp w programie nauczania.\",\n \"s2i8\": \"Status subskrypcji, typ planu i identyfikator klienta Stripe (dla subskrybentów płatnej usługi).\",\n \"s2i9\": \"Wspomnienia i preferencje, których korepetytor AI uczy się o Tobie podczas rozmów, aby personalizować przyszłe interakcje.\",\n \"s2i10\": \"Propozycje funkcji, zgłoszenia błędów, komentarze i głosy przesyłane za pośrednictwem tablicy sugestii. Publicznie wyświetlana jest tylko Twoja nazwa użytkownika; wszyscy użytkownicy mogą przeglądać opublikowane sugestie i zgłoszenia.\",\n \"s3Title\": \"3. Jak wykorzystujemy Twoje dane\",\n \"s3Intro\": \"Twoje dane są wykorzystywane wyłącznie w celu świadczenia usługi nauki FreeLingo:\",\n \"s3i1\": \"Uwierzytelnianie i utrzymywanie sesji.\",\n \"s3i2\": \"Personalizacja planu nauki i interakcji z korepetytorem.\",\n \"s3i3\": \"Śledzenie postępów w nauce w czasie.\",\n \"s3i4\": \"Generowanie kontekstowych odpowiedzi korepetytora AI.\",\n \"s3i5\": \"Zapamiętywanie Twoich preferencji i kontekstu, aby korepetytor AI mógł oferować bardziej spersonalizowane interakcje.\",\n \"s3i6\": \"Wyświetlanie i zarządzanie propozycjami funkcji i zgłoszeniami błędów społeczności.\",\n \"s3Footer\": \"Twoje dane nigdy nie są sprzedawane, wynajmowane ani udostępniane stronom trzecim w celach marketingowych.\",\n \"s4Title\": \"4. Zewnętrzne usługi AI\",\n \"s4Body\": \"W usłudze hostowanej czat AI, synteza mowy (TTS) i transkrypcja mowy (STT) są świadczone za pośrednictwem API OpenAI. Treści rozmów i dźwięk są wysyłane do OpenAI w celu przetworzenia, zgodnie z Polityką prywatności OpenAI (openai.com/privacy). Przetwarzanie płatności jest obsługiwane przez Stripe, Inc. (USA); Stripe przetwarza dane płatnicze bezpośrednio i nie przechowujemy danych kart płatniczych na naszych serwerach — Twoje dane transakcyjne podlegają Polityce prywatności Stripe (stripe.com/privacy). W przypadku wdrożeń samodzielnie hostowanych operator wybiera dostawcę AI; domyślnie używana jest lokalna instancja Ollama i żadne dane nie opuszczają serwera.\",\n \"s5Title\": \"5. Pliki cookie i tokeny sesji\",\n \"s5Body\": \"FreeLingo używa dwóch technicznych plików cookie niezbędnych do działania usługi: refresh_token (httpOnly, ważność 30 dni) używany do uwierzytelniania sesji oraz NEXT_LOCALE (ważność 1 rok) do zapamiętania preferencji językowych. Nie są używane pliki cookie do śledzenia ani reklam. Do anonimowego pomiaru ruchu używamy Umami — samodzielnie hostowanego, otwartoźródłowego narzędzia analitycznego, które nie używa plików cookie, nie zbiera danych osobowych i przechowuje wszystkie dane na naszych serwerach.\",\n \"s6Title\": \"6. Twoje prawa (RODO)\",\n \"s6Body\": \"Jeśli jesteś na terenie Europejskiego Obszaru Gospodarczego, masz prawo do: dostępu do danych osobowych, które przechowujemy; żądania poprawienia niedokładnych danych; żądania usunięcia konta i wszystkich powiązanych danych (dostępne bezpośrednio ze strony Ustawień); sprzeciwu wobec przetwarzania; oraz żądania przenośności danych. Aby skorzystać z tych praw, skontaktuj się z nami pod adresem w sekcji 8 lub usuń konto bezpośrednio w ustawieniach. Podstawa prawna przetwarzania (Art. 6 ust. 1 lit. b RODO): przetwarzamy Twoje dane osobowe, ponieważ jest to niezbędne do wykonania umowy między Tobą a nami — świadczenia usługi FreeLingo. Przekazywanie danych poza EOG: korzystając z usługi hostowanej, treść Twoich rozmów i dźwięk mogą być przetwarzane przez OpenAI, Inc. (USA), a dane płatnicze są przetwarzane przez Stripe, Inc. (USA). Przekazania te odbywają się na podstawie Standardowych Klauzul Umownych zatwierdzonych przez Komisję Europejską (Art. 46 RODO), zapewniających odpowiedni poziom ochrony. Prawo do skargi: masz prawo wnieść skargę do Prezesa Urzędu Ochrony Danych Osobowych (UODO — uodo.gov.pl) lub organu nadzorczego w swoim kraju zamieszkania.\",\n \"s7Title\": \"7. Przechowywanie i usuwanie danych\",\n \"s7Body\": \"Twoje dane są przechowywane przez cały czas istnienia konta. Możesz trwale usunąć swoje konto i wszystkie powiązane dane w dowolnym momencie ze strony ustawień. Usunięcie jest natychmiastowe i nieodwracalne.\",\n \"s8Title\": \"8. Kontakt\",\n \"s8Body\": \"W sprawach dotyczących prywatności usługi hostowanej skontaktuj się z nami pod adresem: contacto@arturocarreterocalvo.com.\",\n \"s9Title\": \"9. Rozdzielność\",\n \"s9Body\": \"Jeśli którekolwiek postanowienie niniejszej polityki zostanie uznane za nieważne lub niewykonalne, zostanie ono ograniczone w minimalnym zakresie, a pozostałe pozostaną w mocy.\",\n \"linkTerms\": \"Regulamin\",\n \"linkBack\": \"Wróć do rejestracji\",\n \"linkBackSettings\": \"Wróć do ustawień\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Witaj ponownie\",\n \"streak\": \"Passa\",\n \"xp\": \"PD\",\n \"level\": \"Poziom\",\n \"skills\": \"Umiejętności\",\n \"today\": \"Dzisiaj\",\n \"noSkills\": \"Ukończ ocenę poziomu, aby śledzić umiejętności.\",\n \"noLessons\": \"Brak zaplanowanych lekcji na dziś.\",\n \"lessonDone\": \"ukończono\",\n \"startLesson\": \"Rozpocznij\",\n \"loadingProgress\": \"Ładowanie postępów...\",\n \"noLevel\": \"Poziom nie jest jeszcze ustawiony.\",\n \"completeAssessment\": \"Wykonaj ocenę poziomu\",\n \"allCaughtUp\": \"Wszystko na bieżąco.\",\n \"startWithAssessment\": \"Zacznij od oceny poziomu.\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"goToMyPlan\": \"Mój plan →\",\n \"quickActions\": \"Szybkie akcje\",\n \"dayProgress\": \"Dzień {current} z {total}\",\n \"skipDay\": \"Pomiń dzisiaj\",\n \"pendingLessons\": \"zaległe lekcje\",\n \"nextStep\": \"Następny krok\",\n \"assessmentCreatesPlan\": \"Ocena określa Twój poziom i tworzy spersonalizowany plan dla aktywnego języka.\",\n \"lessonReady\": \"Lekcja gotowa\",\n \"pendingStillAvailable\": \"Masz {count} wcześniejsze lekcje oczekujące w planie.\",\n \"noPendingToday\": \"Dzisiejsze lekcje są ukończone. Możesz przejrzeć plan lub poćwiczyć inną aktywność.\",\n \"lessonsCompleted\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"exerciseStats\": \"{correct}/{total} ćwiczeń\",\n \"noExercisesYet\": \"Brak ćwiczeń\",\n \"planProgress\": \"Postęp planu\",\n \"currentDay\": \"Aktualny dzień\",\n \"daysRemaining\": \"Pozostałe dni\",\n \"completedToday\": \"{completed}/{total} zrobione\",\n \"vocabularyProgress\": \"Słownictwo {level}\",\n \"vocabularyWords\": \"{mastered}/{total} słów\",\n \"recentPerformance\": \"Ostatnie wyniki\",\n \"recentPerformanceDescription\": \"Na podstawie ostatnich odpowiedzi i powtórek.\",\n \"performanceNeedsPractice\": \"Wymaga praktyki\",\n \"performanceInProgress\": \"W trakcie\",\n \"performanceStrong\": \"Mocne\",\n \"premiumBannerTitle\": \"Ćwicz więcej z FreeLingo Premium\",\n \"premiumBannerDesc\": \"Uzyskaj dostęp do Reading, Listening, czatu z Lingu i rozmów głosowych.\",\n \"premiumBannerCta\": \"Zobacz plany →\"\n },\n \"assessment\": {\n \"title\": \"Ocena poziomu\",\n \"subtitle\": \"Klasyfikacja CEFR\",\n \"intro\": \"Zadamy Ci kilka pytań, aby określić Twój poziom angielskiego.\",\n \"startWriting\": \"Rozpocznij ocenę pisania\",\n \"startQuiz\": \"Rozpocznij quiz\",\n \"writing\": {\n \"title\": \"Próbka pisania\",\n \"submit\": \"Wyślij tekst\",\n \"placeholder\": \"Napisz swoją odpowiedź tutaj...\",\n \"evaluating\": \"Ocenianie...\"\n },\n \"quiz\": {\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"next\": \"Dalej\",\n \"submit\": \"Wyślij quiz\",\n \"submitting\": \"Wysyłanie...\"\n },\n \"result\": {\n \"title\": \"Twój poziom\",\n \"xpEarned\": \"Zdobyte PD\",\n \"skillsTitle\": \"Umiejętności\",\n \"goToPlan\": \"Zobacz mój plan\",\n \"generatePlan\": \"Wygeneruj plan nauki\"\n },\n \"currentLevel\": \"Aktualny poziom\",\n \"assessedOn\": \"Oceniono\",\n \"alreadyHasPlan\": \"Masz już aktywny plan nauki. Powtórna ocena utworzy nowy.\",\n \"retake\": \"Powtórz ocenę\",\n \"evaluating\": \"Ocenianie...\",\n \"resultStep\": \"Wynik\",\n \"cefrLevel\": \"Poziom CEFR\",\n \"overrideLevel\": \"Zmień poziom startowy\",\n \"strengths\": \"Mocne strony\",\n \"needsWork\": \"Do poprawy\",\n \"createPlan\": \"Utwórz plan →\",\n \"creating\": \"Tworzenie...\",\n \"loading\": \"Ładowanie...\",\n \"levelTest\": {\n \"title\": \"Test ukończenia poziomu\",\n \"loading\": \"Ładowanie pytań...\",\n \"loadingTest\": \"Ładowanie testu...\",\n \"submittingTest\": \"Wysyłanie odpowiedzi...\",\n \"question\": \"Pytanie\",\n \"of\": \"z\",\n \"confirm\": \"Potwierdź odpowiedź\",\n \"nextQuestion\": \"Następne pytanie\",\n \"submit\": \"Wyślij test\",\n \"result\": {\n \"title\": \"Test ukończony\",\n \"recommendation\": \"Zalecenie\",\n \"advance\": \"Gotowy(-a) do przejścia na następny poziom\",\n \"extend\": \"Kontynuuj na obecnym poziomie\",\n \"repeat\": \"Zalecana powtórka obecnego poziomu\",\n \"back\": \"Wróć do planu\"\n }\n },\n \"suggestedLevel\": \"Proponowany {aiLevel}; plan będzie używać {selectedLevel}\",\n \"step1\": \"Krok 1 / 3: twój poziom\",\n \"step2\": \"Krok 2 / 3: pytanie {questionNumber} / {totalQuestions}\",\n \"step3\": \"Krok 3 / 3: twój program\",\n \"studiedBefore\": \"Czy uczyłeś(-aś) się wcześniej {language}?\",\n \"studiedBeforeHint\": \"To pomaga nam dopasować quiz do odpowiedniego poziomu.\",\n \"beginnerOption\": \"Jestem kompletnym początkującym\",\n \"beginnerOptionHint\": \"Zacznę od A1, quiz nie jest potrzebny.\",\n \"hasExperienceOption\": \"Tak, mam pewne doświadczenie\",\n \"hasExperienceOptionHint\": \"Rozwiążę krótki adaptacyjny quiz (ok. 12 pytań).\",\n \"skills\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\"\n },\n \"howManyWeeks\": \"Ile tygodni na poziom {cefr_level}?\",\n \"nWeeks\": \"{count} tygodni\",\n \"intensity\": {\n \"intensive\": \"Intensywny\",\n \"standard\": \"Standardowy\",\n \"relaxed\": \"Spokojny\",\n \"veryRelaxed\": \"Bardzo spokojny\"\n },\n \"approxLessons\": \"~{count} lekcji\",\n \"daysPerWeek\": \"{count} dni/tydzień\",\n \"mainGoals\": \"Główne cele (zaznacz wszystkie, które dotyczą)\",\n \"goals\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Poziom\",\n \"summaryDuration\": \"Czas trwania\",\n \"summaryGoals\": \"Cele\",\n \"noneSelected\": \"nic nie wybrano\",\n \"buildingPlan\": \"Tworzenie planu...\",\n \"startWarningTitle\": \"Zanim zaczniesz\",\n \"startWarningMessage\": \"Jeśli opuścisz ocenę przed jej ukończeniem, utracisz postęp i będziesz musiał zacząć od nowa.\",\n \"startWarningMessageLevelTest\": \"Jeśli opuścisz test poziomujący przed jego ukończeniem, utracisz postęp i będziesz musiał go powtórzyć.\",\n \"startWarningConfirm\": \"Rozpocznij\",\n \"startMyPlan\": \"Rozpocznij mój plan\"\n },\n \"plan\": {\n \"title\": \"Mój plan\",\n \"subtitle\": \"Plan nauki\",\n \"noPlan\": \"Nie znaleziono aktywnego planu nauki.\",\n \"startAssessment\": \"Najpierw oceń poziom\",\n \"week\": \"Tydzień\",\n \"currentLesson\": \"Bieżąca lekcja\",\n \"startLesson\": \"Rozpocznij lekcję\",\n \"completed\": \"Ukończono\",\n \"generating\": \"Generowanie lekcji...\",\n \"generatingError\": \"Nie udało się wygenerować lekcji\",\n \"loading\": \"Ładowanie planu...\",\n \"learningRoadmap\": \"Plan nauki\",\n \"level\": \"Poziom\",\n \"duration\": \"Czas trwania\",\n \"durationDetail\": \"{weeks} tygodnie · {days} dni/tydzień\",\n \"unitsLabel\": \"Jednostki\",\n \"noUnitsForLevel\": \"Brak dostępnych jednostek dla poziomu {level}\",\n \"takeAssessmentArrow\": \"Oceń poziom →\",\n \"unitLabel\": \"Jednostka\",\n \"grammarCovered\": \"Omówiona gramatyka\",\n \"noLessons\": \"Brak zaplanowanych lekcji dla tej jednostki.\",\n \"weekDay\": \"Tydzień {week}, dzień {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatyka\",\n \"vocabulary\": \"Słownictwo\",\n \"reading\": \"Czytanie\",\n \"writing\": \"Pisanie\",\n \"conversation\": \"Rozmowa\",\n \"review\": \"Powtórka\",\n \"level_test\": \"Test poziomu\"\n },\n \"levelComplete\": \"Poziom {level} ukończony. Przystąp do testu poziomu\",\n \"levelCompleteDesc\": \"Ukończyłeś(-aś) wszystkie jednostki dla poziomu {level}. Przystąp do testu ukończenia poziomu, aby potwierdzić postępy i odblokować następny poziom.\",\n \"levelCompleteHint\": \"Test trwa ok. 20 minut i obejmuje gramatykę, słownictwo i czytanie.\",\n \"beginLevelTest\": \"Rozpocznij test poziomu\",\n \"nLessons\": \"{count} lekcji\",\n \"nGrammar\": \"{count} gramatyka\",\n \"levelTestLabel\": \"Test poziomu\",\n \"unitAriaLabel\": \"Jednostka {index}: {title}\",\n \"noUnitsDesc\": \"Treści dla tego poziomu są przygotowywane. Sprawdź ponownie wkrótce.\",\n \"completionTestTitle\": \"Test ukończenia poziomu {level}\",\n \"levelTestResult\": \"Wynik testu poziomu\",\n \"testScore\": \"Wynik:\",\n \"pendingLessons\": \"Zaległe lekcje\",\n \"resume\": \"Wznów\",\n \"noPlanLabel\": \"ZACZNIJ\",\n \"noPlanTitle\": \"Stwórz plan nauki\",\n \"noPlanDesc\": \"Wykonaj szybką ocenę, aby poznać swój poziom i otrzymać spersonalizowaną ścieżkę nauki.\",\n \"noPlanHint\": \"Zajmuje około 10 minut\"\n },\n \"lesson\": {\n \"loading\": \"Ładowanie lekcji...\",\n \"notFound\": \"Nie znaleziono lekcji\",\n \"backToPlan\": \"Wróć do planu\",\n \"progress\": \"Postęp\",\n \"exercise\": \"Ćwiczenie\",\n \"of\": \"z\",\n \"checkAnswer\": \"Sprawdź odpowiedź\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"submitWriting\": \"Wyślij tekst\",\n \"yourAnswer\": \"Twoja odpowiedź...\",\n \"correct\": \"Poprawnie\",\n \"incorrect\": \"Niepoprawnie\",\n \"feedback\": \"Informacja zwrotna\",\n \"completeLesson\": \"Ukończ lekcję\",\n \"completing\": \"Kończenie...\",\n \"relatedGrammar\": \"Powiązana gramatyka\",\n \"explanation\": \"Wyjaśnienie\",\n \"exercises\": \"Ćwiczenia\",\n \"vocabulary\": \"Słownictwo\",\n \"label\": \"Lekcja\",\n \"submitAnswer\": \"Wyślij odpowiedź\",\n \"lessonDone\": \"Lekcja ukończona\",\n \"score\": \"Wynik\",\n \"showNativeExplanation\": \"Pokaż w\",\n \"examples\": \"Przykłady\",\n \"commonTraps\": \"Częste błędy\",\n \"miniGlossary\": \"Mini słowniczek\",\n \"pronunciationExercise\": \"Wymowa\",\n \"exerciseTypeMultipleChoice\": \"Wielokrotny wybór\",\n \"exerciseTypeFillBlank\": \"Uzupełnianie luk\",\n \"exerciseTypeFreeWrite\": \"Swobodne pisanie\",\n \"exerciseTypePronunciation\": \"Wymowa\",\n \"tapToListen\": \"Dotknij, aby posłuchać\",\n \"recordNow\": \"Nagraj swoją odpowiedź\",\n \"exit\": \"Wyjdź\",\n \"exitConfirmTitle\": \"Wyjść z lekcji?\",\n \"exitConfirmMessage\": \"Twój postęp w tej lekcji zostanie utracony.\",\n \"dayComplete\": \"Dzień ukończony!\",\n \"dayCompleteMsg\": \"Wszystkie dzisiejsze lekcje są ukończone.\"\n },\n \"flashcards\": {\n \"title\": \"Fiszki\",\n \"due\": \"Do powtórki\",\n \"total\": \"Łącznie\",\n \"noDue\": \"Brak kart do powtórki\",\n \"allCaughtUp\": \"Wszystko na bieżąco!\",\n \"generate\": \"Wygeneruj fiszki\",\n \"generating\": \"Generowanie...\",\n \"topic\": \"Temat\",\n \"topicPlaceholder\": \"np. słownictwo podróżnicze\",\n \"count\": \"Liczba\",\n \"level\": \"Poziom\",\n \"submit\": \"Generuj\",\n \"again\": \"Jeszcze raz\",\n \"hard\": \"Trudne\",\n \"good\": \"Dobre\",\n \"easy\": \"Łatwe\",\n \"front\": \"Słowo\",\n \"back\": \"Definicja\",\n \"loading\": \"Ładowanie fiszek...\",\n \"sectionGenerate\": \"Wygeneruj nowe karty\",\n \"speakingMode\": \"Mówienie\",\n \"standardMode\": \"Standardowy\",\n \"sayWord\": \"Powiedz słowo na głos\",\n \"refresh\": \"Odśwież\",\n \"generateBtn\": \"Generuj\",\n \"cards\": \"karty\",\n \"myVocabularyBtn\": \"Mój słownik\",\n \"myVocabulary\": \"Mój słownik\",\n \"myVocabularyEmpty\": \"Nie zapisano jeszcze żadnych słów. Zaznacz słowo podczas czytania, aby je tutaj zapisać.\",\n \"myVocabularyNoResults\": \"Żadne zapisane słowa nie pasują do wyszukiwania.\",\n \"vocabularySearch\": \"Szukaj słów...\",\n \"vocabularyPageInfo\": \"Strona {page} z {pages}\",\n \"vocabularyPrev\": \"Poprz.\",\n \"vocabularyNext\": \"Nast.\",\n \"backToFlashcards\": \"Fiszki\",\n \"noCardsHint\": \"Użyj + Wygeneruj, aby stworzyć pierwsze fiszki z AI\",\n \"tapToHide\": \"dotknij aby ukryć\",\n \"tapToReveal\": \"dotknij aby pokazać\",\n \"interval\": \"Interwał\",\n \"repetitions\": \"Powt\"\n },\n \"chat\": {\n \"title\": \"Korepetytor AI\",\n \"subtitle\": \"{language} — Zapytaj o cokolwiek\",\n \"placeholder\": \"Napisz wiadomość...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"noConversation\": \"Wybierz lub rozpocznij rozmowę\",\n \"newConversation\": \"Nowy czat\",\n \"conversations\": \"Rozmowy\",\n \"loading\": \"Ładowanie...\",\n \"thinking\": \"Myślenie...\",\n \"takingLonger\": \"Trwa to dłużej niż oczekiwano...\",\n \"errorMessage\": \"Coś poszło nie tak. Spróbuj ponownie.\",\n \"deleteTitle\": \"Usuń czat\",\n \"deleteMessage\": \"Ta rozmowa zostanie trwale usunięta.\",\n \"deleteConfirm\": \"Usuń\",\n \"enterToSend\": \"Enter aby wysłać\",\n \"continueInVoice\": \"Kontynuuj głosowo\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\"\n },\n \"progress\": {\n \"title\": \"Postępy\",\n \"subtitle\": \"Śledzenie umiejętności\",\n \"xp\": \"PD\",\n \"streak\": \"Passa\",\n \"lessons\": \"Lekcje\",\n \"accuracy\": \"Dokładność\",\n \"noPlan\": \"Brak aktywnego planu nauki.\",\n \"startPlan\": \"Zacznij ocenę\",\n \"competencies\": \"Kompetencje jednostki\",\n \"vocabularySection\": \"Słownictwo\",\n \"skills\": \"Dokładność umiejętności\",\n \"mastered\": \"Opanowane\",\n \"inProgress\": \"W trakcie\",\n \"notStarted\": \"Nierozpoczęte\",\n \"loading\": \"Ładowanie postępów...\",\n \"days\": \"dni\",\n \"noData\": \"Ukończ kilka lekcji, aby zobaczyć swoje postępy.\",\n \"exploreVocab\": \"Przeglądaj zestawy słownictwa\",\n \"competenciesSection\": \"Kompetencje gramatyczne {level}\",\n \"noCompetencies\": \"Ukończ lekcje, aby zacząć śledzić kompetencje.\",\n \"goToMyPlan\": \"→ Przejdź do mojego planu\",\n \"addToFlashcards\": \"Dodaj słowa z zestawu do talii fiszek, aby śledzić postęp poszczególnych słów.\",\n \"noActivePlanDesc\": \"Ukończ ocenę poziomu, aby zacząć śledzić umiejętności.\",\n \"vocabularyHeader\": \"Słownictwo {level}\",\n \"currentLevelOnly\": \"Tylko bieżący poziom\",\n \"allLevels\": \"Wszystkie poziomy\"\n },\n \"grammar\": {\n \"title\": \"Podręcznik gramatyki\",\n \"subtitle\": \"Odniesienie\",\n \"searchPlaceholder\": \"Szukaj tematów gramatycznych...\",\n \"allLevels\": \"Wszystkie poziomy\",\n \"allCategories\": \"Wszystkie\",\n \"noResults\": \"Nie znaleziono tematów.\",\n \"structure\": \"Struktura\",\n \"keyRules\": \"Kluczowe zasady\",\n \"examples\": \"Przykłady\",\n \"commonMistakes\": \"Częste błędy\",\n \"relatedTopics\": \"Powiązane tematy\",\n \"backToGrammar\": \"Podręcznik gramatyki\",\n \"explanation\": \"Wyjaśnienie\",\n \"backLink\": \"Wróć do gramatyki\",\n \"notFound\": \"Nie znaleziono tematu.\",\n \"topicsFound\": \"{count, plural, one {# temat znaleziony} few {# tematy znalezione} other {# tematów znalezionych}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrum słownictwa\",\n \"subtitle\": \"Słownictwo\",\n \"all\": \"Wszystkie\",\n \"searchPlaceholder\": \"Szukaj zestawów...\",\n \"sets\": \"zestawy\",\n \"words\": \"słowa\",\n \"addAll\": \"Dodaj wszystkie {count} do fiszek\",\n \"adding\": \"Dodawanie...\",\n \"added\": \"Dodano {count} fiszek\",\n \"addError\": \"Nie udało się dodać fiszek\",\n \"frequency\": \"częst.\",\n \"backToVocabulary\": \"Centrum słownictwa\",\n \"notFound\": \"Nie znaleziono zestawu.\",\n \"vocabularySet\": \"Zestaw słownictwa\",\n \"cardsAdded\": \"{count} kart dodanych do talii fiszek.\",\n \"goToFlashcards\": \"Przejdź do fiszek →\",\n \"addFailed\": \"Nie udało się dodać fiszek.\",\n \"noResults\": \"Żadne zestawy słownictwa nie pasują do wyszukiwania\"\n },\n \"phrasebook\": {\n \"title\": \"Rozmówki\",\n \"subtitle\": \"Zwroty\",\n \"all\": \"Wszystkie\",\n \"allRegisters\": \"Wszystkie rejestry\",\n \"formal\": \"Formalny\",\n \"neutral\": \"Neutralny\",\n \"informal\": \"Nieformalny\",\n \"copied\": \"Skopiowano!\",\n \"copy\": \"Kopiuj\",\n \"noResults\": \"Brak zwrotów pasujących do filtrów\",\n \"level\": \"Poziom\",\n \"register\": \"Rejestr\",\n \"statsLine\": \"{situationCount} sytuacji · {phraseCount} zwrotów · {range}\",\n \"situationsShown\": \"{count, plural, one {# sytuacja wyświetlona} few {# sytuacje wyświetlone} other {# sytuacji wyświetlonych}}\",\n \"searchPlaceholder\": \"Szukaj zwrotów...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Przegląd\",\n \"users\": \"Użytkownicy\",\n \"feedback\": \"Opinie\",\n \"reviews\": \"Recenzje\",\n \"invites\": \"Linki zaproszenia\",\n \"createUser\": \"Utwórz użytkownika\",\n \"createInvite\": \"Generuj zaproszenie\",\n \"deactivate\": \"Dezaktywuj\",\n \"activate\": \"Aktywuj\",\n \"loading\": \"Ładowanie...\",\n \"loadError\": \"Nie udało się załadować danych użytkownika\",\n \"userNotFound\": \"Nie znaleziono użytkownika\",\n \"role\": \"Rola\",\n \"status\": \"Status\",\n \"active\": \"Aktywny\",\n \"inactive\": \"Nieaktywny\",\n \"inviteCreated\": \"Link zaproszenia utworzony\",\n \"copyLink\": \"Kopiuj link\",\n \"inviteCopied\": \"Link zaproszenia skopiowany\",\n \"deleteUser\": \"Usuń użytkownika\",\n \"deleteUserMessage\": \"Usunąć tego użytkownika? Tej operacji nie można cofnąć.\",\n \"deleteConfirm\": \"Usuń\",\n \"noUsers\": \"Nie znaleziono użytkowników\",\n \"inviteLink\": \"Link zaproszenia (ważny 48h)\",\n \"total\": \"łącznie\",\n \"delete\": \"Usuń\",\n \"inviteBtn\": \"+ Link zaproszenia\",\n \"createUserBtn\": \"+ Utwórz użytkownika\",\n \"prevPage\": \"← Poprzednia\",\n \"nextPage\": \"Następna →\",\n \"roleUser\": \"Użytkownik\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nazwa użytkownika\",\n \"invalidUsernameChars\": \"Nazwa użytkownika może zawierać tylko litery, cyfry, myślniki, podkreślenia i kropki\",\n \"fieldEmail\": \"E-mail (opcjonalny)\",\n \"fieldPassword\": \"Hasło\",\n \"fieldDisplayName\": \"Wyświetlana nazwa\",\n \"fieldNativeLanguage\": \"Język ojczysty\",\n \"fieldTargetLanguage\": \"Język do nauki\",\n \"fieldRole\": \"Typ konta\",\n \"submitCreate\": \"Utwórz\",\n \"searchPlaceholder\": \"Szukaj po nazwie użytkownika lub e-mailu...\",\n \"statsTitle\": \"Statystyki użytkowania\",\n \"statsCefr\": \"Aktualny poziom\",\n \"statsUnit\": \"Bieżąca jednostka\",\n \"statsPlanWeeks\": \"Czas trwania planu\",\n \"sectionXpProgress\": \"PD i postępy\",\n \"statsXp\": \"Łączne PD\",\n \"statsStreak\": \"Passa\",\n \"statsActiveDays\": \"Aktywne dni\",\n \"statsLessons\": \"Ukończone lekcje\",\n \"statsExercises\": \"Poprawne ćwiczenia\",\n \"statsMessages\": \"Wysłane wiadomości\",\n \"statsTokensTotal\": \"Zużyte tokeny (łącznie)\",\n \"statsTokensChat\": \"Tokeny korepetytora\",\n \"statsTokensConversation\": \"Tokeny głosowe\",\n \"statsTokensNote\": \"Dostępne tylko gdy dostawca AI zwraca te informacje\",\n \"statsNoData\": \"Brak danych o postępach\",\n \"viewStats\": \"Zobacz statystyki\",\n \"weeks\": \"tygodni\",\n \"statsTestScore\": \"Wynik końcowego testu\",\n \"statsDays\": \"dni\",\n \"sectionQuota\": \"Limity rozmów\",\n \"quotaWeeklySessions\": \"Tygodniowy limit sesji\",\n \"quotaDailyMinutes\": \"Dzienny limit minut\",\n \"quotaWeeklyMinutes\": \"Tygodniowy limit minut\",\n \"quotaUnlimitedLabel\": \"Nieograniczony (0)\",\n \"quotaUsedSessions\": \"Użyte w tym tygodniu\",\n \"quotaUsedMinutes\": \"Użyte dzisiaj\",\n \"quotaUsedWeeklyMinutes\": \"Użyte w tym tygodniu (min)\",\n \"quotaSave\": \"Zapisz limity\",\n \"quotaSaved\": \"Limity zapisane.\",\n \"emailVerified\": \"E-mail zweryfikowany\",\n \"emailNotVerified\": \"E-mail niezweryfikowany\",\n \"verifyEmail\": \"Zweryfikuj e-mail\",\n \"unverifyEmail\": \"Oznacz jako niezweryfikowany\",\n \"emailVerifiedSuccess\": \"E-mail oznaczony jako zweryfikowany.\",\n \"emailUnverifiedSuccess\": \"E-mail oznaczony jako niezweryfikowany.\",\n \"quotaMonthlyTokens\": \"Miesięczny limit tokenów\",\n \"fieldSubscription\": \"Subskrypcja\",\n \"fieldEndsRenews\": \"Kończy / odnawia\",\n \"fieldStripeCustomer\": \"Klient Stripe\",\n \"maintenanceTitle\": \"Tryb konserwacji\",\n \"maintenanceOn\": \"WŁ.\",\n \"maintenanceEnable\": \"Włącz konserwację\",\n \"maintenanceDisable\": \"Wyłącz konserwację\",\n \"maintenanceDesc\": \"Po włączeniu wszystkie funkcje subskrypcyjne (czat, rozmowy głosowe, ćwiczenia ze słuchu i czytania) będą niedostępne dla wszystkich użytkowników.\",\n \"cannotDeactivateSelf\": \"Nie możesz dezaktywować własnego konta\",\n \"cannotDeleteSelf\": \"Nie możesz usunąć własnego konta\",\n \"sectionLanguages\": \"Języki\",\n \"sectionActivity\": \"Aktywność\",\n \"statsActive\": \"Aktywny\",\n \"manageUsers\": \"Zarządzaj użytkownikami\",\n \"manageUsersDesc\": \"Przeglądaj konta, subskrypcje, role i status dostępu.\",\n \"createUserDesc\": \"Utwórz zarządzane konto użytkownika z początkowym językiem nauki.\",\n \"reviewFeedback\": \"Przejrzyj opinie\",\n \"reviewFeedbackDesc\": \"Triage próśb o funkcje i zgłoszeń błędów od uczących się.\",\n \"reviewReviews\": \"Przejrzyj recenzje\",\n \"reviewReviewsDesc\": \"Zatwierdzaj zweryfikowane recenzje uczących się do wyświetlenia na stronie głównej.\",\n \"maintenanceOnDesc\": \"Tryb konserwacji jest aktywny dla narzędzi edukacyjnych wymagających subskrypcji.\",\n \"maintenanceOffDesc\": \"Tryb konserwacji jest wyłączony. Narzędzia wymagające subskrypcji są dostępne.\",\n \"openSystemControls\": \"Kontrola systemu\",\n \"adminRequired\": \"Wymagany dostęp administratora\",\n \"usersLoadError\": \"Nie udało się wczytać użytkowników\",\n \"createUserError\": \"Nie udało się utworzyć użytkownika\",\n \"updateUserError\": \"Nie udało się zaktualizować użytkownika\",\n \"deleteUserError\": \"Nie udało się usunąć użytkownika\",\n \"inviteError\": \"Nie udało się wygenerować linku zaproszenia\",\n \"copyInviteError\": \"Nie udało się skopiować linku zaproszenia\",\n \"maintenanceError\": \"Nie udało się zaktualizować trybu konserwacji\",\n \"maintenanceOff\": \"WYŁ.\",\n \"inviteExpiry\": \"Link jednorazowy. Wygasa po 48 godzinach.\",\n \"searchAction\": \"Szukaj użytkowników\",\n \"roleFilter\": \"Filtruj według roli\",\n \"statusFilter\": \"Filtruj według statusu\",\n \"subscriptionFilter\": \"Filtruj według subskrypcji\",\n \"allRoles\": \"Wszystkie role\",\n \"allStatuses\": \"Wszystkie statusy\",\n \"allSubscriptions\": \"Wszystkie subskrypcje\",\n \"clearFilters\": \"Wyczyść\",\n \"userColumn\": \"Użytkownik\",\n \"actions\": \"Akcje\",\n \"createUserSheetDesc\": \"Konto jest tworzone natychmiast. Weryfikacja e-mail zostanie wysłana, gdy e-mail jest włączony.\",\n \"activateUser\": \"Aktywuj użytkownika\",\n \"deactivateUser\": \"Dezaktywuj użytkownika\",\n \"activateUserMessage\": \"Aktywować to konto użytkownika?\",\n \"deactivateUserMessage\": \"Dezaktywować to konto użytkownika? Nie będzie mógł używać aplikacji do czasu ponownej aktywacji.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Języki\",\n \"tabActivity\": \"Aktywność\",\n \"tabQuota\": \"Limity\",\n \"tabSubscription\": \"Subskrypcja\",\n \"sectionCommunication\": \"Komunikacja\",\n \"quotaCurrentUsage\": \"Bieżące użycie\",\n \"quotaConfiguredLimits\": \"Skonfigurowane limity\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesje\",\n \"unitTokens\": \"tokeny\",\n \"quotaZeroMeansUnlimited\": \"Ustaw limit na 0, aby zapewnić nieograniczony dostęp.\",\n \"quotaValidationError\": \"Wszystkie wartości limitów muszą być liczbami całkowitymi większymi lub równymi 0.\",\n \"quotaSaveError\": \"Nie udało się zapisać limitów.\",\n \"subscriptionOverride\": \"Ręczna zmiana subskrypcji\",\n \"subscriptionOverrideDesc\": \"To bezpośrednio zmienia okres dostępu użytkownika i może zastąpić stan zarządzany przez Stripe.\",\n \"subscriptionUpdateError\": \"Nie udało się zaktualizować subskrypcji.\",\n \"saving\": \"Zapisywanie...\",\n \"verifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako zweryfikowany?\",\n \"unverifyEmailConfirmMessage\": \"Oznaczyć ten adres e-mail jako niezweryfikowany?\",\n \"subscriptionConfirmTitle\": \"Zmień subskrypcję\",\n \"subscriptionConfirmMessage\": \"Zastosować plan subskrypcji: {plan}?\",\n \"subscriptionConfirm\": \"Zastosuj\",\n \"feedbackStatusError\": \"Nie udało się zaktualizować statusu opinii.\",\n \"feedbackDeleteError\": \"Nie udało się usunąć wpisu opinii.\",\n \"allFeedback\": \"Wszystkie opinie\",\n \"feedbackTotal\": \"Łącznie opinii\",\n \"feedbackQueue\": \"Kolejka opinii\",\n \"feedbackSearchPlaceholder\": \"Szukaj po tytule, opisie lub autorze...\",\n \"feedbackSearchAction\": \"Szukaj opinii\",\n \"feedbackTypeFilter\": \"Filtruj według typu opinii\",\n \"noFilteredFeedback\": \"Żadna opinia nie pasuje do obecnych filtrów.\",\n \"feedbackItem\": \"Wpis\",\n \"type\": \"Typ\",\n \"signals\": \"Sygnały\",\n \"feedbackStatusAction\": \"Zmień status opinii\",\n \"adminStatsError\": \"Nie udało się wczytać metryk administratora.\",\n \"activeUsers\": \"Aktywni użytkownicy\",\n \"paidAccess\": \"Aktywne / próbne\",\n \"pendingFeedback\": \"Oczekujące opinie\",\n \"pendingReviews\": \"Recenzje oczekujące na zatwierdzenie\",\n \"operationalAlerts\": \"Alerty operacyjne\",\n \"pendingBugs\": \"Oczekujące błędy\",\n \"pendingBugsDesc\": \"Zgłoszenia błędów oczekujące na triage administratora.\",\n \"pastDueSubscriptions\": \"Zaległe subskrypcje\",\n \"pastDueSubscriptionsDesc\": \"Konta z problemami płatności, które mogą wymagać przeglądu.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Często zadawane pytania\",\n \"q_start\": \"Od czego zacząć?\",\n \"a_start\": \"Zacznij od Oceny poziomu. Wykrywa ona Twój poziom angielskiego (A1–C2) oraz mocne i słabe strony. Na podstawie wyniku możesz wygenerować spersonalizowany Plan nauki, który wypełni Twój panel codziennymi lekcjami.\",\n \"q_workflow\": \"Jaki jest pełny przebieg pracy?\",\n \"workflowStep1\": \"Zarejestruj się i wybierz swój język ojczysty\",\n \"workflowStep2\": \"Oceń poziom → wykrywany jest Twój poziom CEFR\",\n \"workflowStep3\": \"Wygeneruj plan nauki z panelu\",\n \"workflowStep4\": \"Ukończ codzienne lekcje (przycisk START w panelu)\",\n \"workflowStep5\": \"Używaj fiszek do trenowania słownictwa równolegle\",\n \"workflowStep6\": \"Ćwicz swobodną rozmowę z korepetytorem AI\",\n \"q_language\": \"Jakiego języka będę się uczyć?\",\n \"a_language\": \"FreeLingo obsługuje obecnie kilka języków (amerykański angielski, brytyjski angielski, francuski, hiszpański, niemiecki, portugalski, włoski) i z czasem będziemy dodawać kolejne. Gdy nowy język będzie dostępny, znajdziesz go w Ustawieniach → Moje języki — dodaj go i zacznij się uczyć od razu.\",\n \"q_assessment\": \"Czym jest ocena poziomu?\",\n \"a_assessment\": \"Test z 15 pytaniami generowanych przez AI, obejmujący gramatykę, słownictwo, czytanie ze zrozumieniem i transformację zdań, z poziomem trudności od A1 do C1.\",\n \"q_studyPlan\": \"Czym jest plan nauki i jak go wygenerować?\",\n \"a_studyPlan\": \"Po ocenie poziomu przejdź do panelu i kliknij Wygeneruj plan nauki. Automatycznie zostanie utworzony tygodniowy plan z codziennymi lekcjami dostosowanymi do Twojego poziomu CEFR i celów.\",\n \"q_flashcards\": \"Do czego służą fiszki?\",\n \"a_flashcards\": \"System trenowania słownictwa wykorzystujący algorytm powtórek rozłożonych w czasie SM-2. Generuj karty na dowolny temat z definicją, przykładowym zdaniem i tłumaczeniem na język ojczysty.\",\n \"q_vocabulary\": \"Jak dodać słowa do mojego słownictwa?\",\n \"a_vocabulary\": \"Możesz zapisywać słowa na dwa sposoby: (1) Podczas czytania lekcji, ćwiczenia ze słuchu lub rozmowy z tutorem zaznacz myszką dowolne słowo i kliknij Zapisz w dymku, który się pojawi — AI wygeneruje definicję, przykładowe zdanie i tłumaczenie na Twój język ojczysty. (2) Przejdź do Słownictwo, otwórz zestaw słownictwa dla swojego poziomu i kliknij Dodaj wszystkie, aby zaimportować cały zestaw naraz. Zapisane słowa pojawiają się w Mój słownik w sekcji Fiszki.\",\n \"q_tutor\": \"Jak działa korepetytor AI?\",\n \"a_tutor\": \"Swobodny czat strumieniowy. Korepetytor zna Twój poziom CEFR i słabe punkty, aby dostosować odpowiedzi. Zadawaj pytania gramatyczne, proś o wyjaśnienia, ćwicz pisanie po angielsku lub po prostu rozmawiaj.\",\n \"q_voice\": \"Jak działa rozmowa głosowa?\",\n \"a_voice\": \"Tryb Rozmowy głosowej umożliwia rozmowę z tutorem AI w czasie rzeczywistym. Naciśnij Start, aby rozpocząć — aplikacja automatycznie wykrywa Twój głos za pomocą detekcji aktywności głosowej (VAD), a tutor odpowiada syntezą mowy. Możesz przerwać tutorowi w dowolnym momencie (barge-in). Sesja kończy się po osiągnięciu limitu czasu lub naciśnięciu Zatrzymaj. Upewnij się, że przeglądarka ma uprawnienia do mikrofonu.\",\n \"q_listening\": \"Jak działają ćwiczenia ze słuchu?\",\n \"a_listening\": \"Sekcja Listening generuje krótkie nagrania audio na Twoim poziomie CEFR, odczytywane przez AI. Odsłuchaj nagranie i odpowiedz na 5 pytań sprawdzających rozumienie. Po przesłaniu otrzymujesz wynik (0–5), XP, poprawne odpowiedzi i pełną transkrypcję. Możesz generować nowe ćwiczenia na żądanie.\",\n \"q_reading\": \"Jak działają ćwiczenia z czytania?\",\n \"a_reading\": \"Sekcja Reading generuje teksty na Twoim poziomie CEFR — ogłoszenia, e-maile, artykuły, wpisy na blogu i więcej. Przeczytaj tekst i odpowiedz na 5 pytań wielokrotnego wyboru. Po przesłaniu otrzymujesz wynik (0–5) i XP. Nowe ćwiczenia mogą być generowane na żądanie.\",\n \"q_providers\": \"Jakich dostawców AI obsługuje FreeLingo?\",\n \"a_providers_intro\": \"Konfigurowane w .env przez LLM_PROVIDER:\",\n \"provider_ollama\": \"Lokalny, bezpłatny. Wymaga Ollama działającego na hoście. Zalecany model: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o itp.). Szybki i niezawodny. Wymaga OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Wymaga ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Wymaga DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Czy mogę zapraszać innych?\",\n \"a_invite\": \"Tak. Z Admin → Użytkownicy administrator może tworzyć użytkowników bezpośrednio lub generować jednorazowe linki zaproszenia wygasające po 48 godzinach.\",\n \"q_password\": \"Jak zmienić hasło lub język ojczysty?\",\n \"a_password\": \"Przejdź do Ustawień. Możesz tam zaktualizować wyświetlaną nazwę, język ojczysty i hasło.\",\n \"q_uiLanguage\": \"Jak zmienić język platformy?\",\n \"a_uiLanguage\": \"Przejdź do Ustawień i znajdź menu rozwijane Język platformy w sekcji Profil. Wybierz preferowany język, a cały interfejs zmieni się natychmiast.\",\n \"q_feedback\": \"Jak mogę zaproponować nową funkcję lub zgłosić błąd?\",\n \"a_feedback\": \"Skorzystaj z sekcji Feedback na pasku bocznym. Możesz zgłaszać pomysły na nowe funkcje lub błędy. Głosuj na pomysły innych użytkowników, zostawiaj komentarze i śledź status każdego zgłoszenia. Wszystkie zgłoszenia są publiczne i sprawdzane przez administratora.\"\n },\n \"cookieBanner\": {\n \"message\": \"Używamy wyłącznie niezbędnych plików cookie, aby utrzymać Cię zalogowanym. Nie używamy plików cookie do śledzenia ani reklam.\",\n \"learnMore\": \"Polityka prywatności\",\n \"accept\": \"Rozumiem\"\n },\n \"error\": {\n \"label\": \"Nieoczekiwany błąd\",\n \"title\": \"Coś poszło nie tak\",\n \"body\": \"Wystąpił nieoczekiwany błąd. Możesz spróbować ponownie lub wrócić do panelu.\",\n \"retry\": \"Spróbuj ponownie\",\n \"dashboard\": \"Przejdź do panelu\",\n \"digest\": \"Numer referencyjny błędu\"\n },\n \"notFound\": {\n \"title\": \"Strona nie znaleziona\",\n \"body\": \"Strona, której szukasz, nie istnieje lub została przeniesiona.\",\n \"dashboard\": \"Przejdź do panelu\",\n \"home\": \"Strona główna\"\n },\n \"errors\": {\n \"notFound\": \"Nie znaleziono strony\",\n \"serverError\": \"Coś poszło nie tak\",\n \"unauthorized\": \"Zaloguj się\",\n \"backHome\": \"Wróć na stronę główną\"\n },\n \"conversation\": {\n \"title\": \"Rozmowa\",\n \"subtitle\": \"Ćwiczenie głosowe\",\n \"start\": \"Rozpocznij sesję\",\n \"stop\": \"Zatrzymaj\",\n \"startNew\": \"Rozpocznij nową sesję\",\n \"statusLoading\": \"Ładowanie modelu głosowego...\",\n \"statusReady\": \"Gotowy\",\n \"statusWarming\": \"Ładowanie modeli...\",\n \"statusConnecting\": \"Łączenie...\",\n \"statusListening\": \"Słuchanie...\",\n \"statusDetecting\": \"Wykrywanie mowy...\",\n \"statusSpeaking\": \"Mówienie...\",\n \"statusError\": \"Błąd\",\n \"errorServicesDisabled\": \"Usługi głosowe nie są włączone na tym serwerze.\",\n \"errorConnection\": \"Błąd połączenia. Spróbuj ponownie.\",\n \"errorUnauthorized\": \"Sesja wygasła. Odśwież stronę.\",\n \"errorMic\": \"Odmówiono dostępu do mikrofonu.\",\n \"errorVadInit\": \"Nie udało się zainicjować rozpoznawania mowy. Upewnij się, że Twoja przeglądarka obsługuje WebAssembly.\",\n \"warningTimeout\": \"Sesja kończy się za {seconds}s\",\n \"sessionEnded\": \"Sesja zakończona\",\n \"tapToStart\": \"Mów kiedy gotowy(-a)\",\n \"you\": \"Ty\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesje w tym tygodniu\",\n \"quotaMinutes\": \"Minuty dzisiaj\",\n \"quotaUnlimited\": \"Nieograniczone\",\n \"quotaExceededSessions\": \"Wykorzystałeś(-aś) wszystkie sesje w tym tygodniu.\",\n \"quotaExceededTime\": \"Wykorzystałeś(-aś) cały dzienny czas ćwiczeń.\",\n \"quotaExceededTokens\": \"Wykorzystałeś(-aś) wszystkie miesięczne tokeny AI.\",\n \"quotaTokens\": \"Tokeny w tym miesiącu\",\n \"memoryUpdated\": \"Pamięć zaktualizowana\",\n \"startersHint\": \"Lub zacznij od tematu\",\n \"starters\": [\n \"Sztuka i kreatywność\",\n \"Książki i czytanie\",\n \"Wspomnienia z dzieciństwa\",\n \"Miasto vs. wieś\",\n \"Gotowanie i przepisy\",\n \"Marzenia i ambicje\",\n \"Rodzina i relacje\",\n \"Moda i styl\",\n \"Ulubione filmy\",\n \"Festiwale i tradycje\",\n \"Jedzenie z całego świata\",\n \"Zdrowie i dobre samopoczucie\",\n \"Hobby i rękodzieło\",\n \"Nauka języków\",\n \"Zdobywanie nowych umiejętności\",\n \"Pieniądze i budżet\",\n \"Muzyka i koncerty\",\n \"Zwierzęta domowe\",\n \"Transport publiczny\",\n \"Nauka i kosmos\",\n \"Nawyki zakupowe\",\n \"Media społecznościowe\",\n \"Sport i fitness\",\n \"Technologia i gadżety\",\n \"Środowisko\",\n \"Miejsca podróży\",\n \"Seriale telewizyjne\",\n \"Plany na weekend\",\n \"Praca i cele zawodowe\",\n \"Praca zdalna\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Nagraj\",\n \"stop\": \"Zatrzymaj\",\n \"processing\": \"Przetwarzanie\",\n \"error\": \"Błąd\",\n \"ariaRecord\": \"Rozpocznij nagrywanie\",\n \"ariaStop\": \"Zatrzymaj nagrywanie\"\n },\n \"audioPlayer\": {\n \"listen\": \"Słuchaj\",\n \"stop\": \"Zatrzymaj\",\n \"ariaListen\": \"Posłuchaj wymowy\",\n \"ariaStop\": \"Zatrzymaj audio\"\n },\n \"languages\": {\n \"en\": \"Angielski\",\n \"es\": \"Hiszpański\",\n \"fr\": \"Francuski\",\n \"pt\": \"Portugalski\",\n \"de\": \"Niemiecki\",\n \"it\": \"Włoski\",\n \"pl\": \"Polski\",\n \"nl\": \"Niderlandzki\",\n \"ro\": \"Rumuński\",\n \"ru\": \"Rosyjski\",\n \"myLanguages\": \"Moje języki\",\n \"addLanguage\": \"Dodaj język\",\n \"selectLanguage\": \"Wybierz język, którego chcesz się uczyć\",\n \"activeLanguage\": \"Aktywny\",\n \"switchTo\": \"Przełącz na ten\",\n \"switching\": \"Przełączanie na {language}...\",\n \"switched\": \"Przełączono na {language} ({level})\",\n \"removeLanguage\": \"Usuń język\",\n \"removeConfirmTitle\": \"Usunąć {language}?\",\n \"removeConfirmMessage\": \"Wszystkie postępy, lekcje, fiszki i dane związane z tym językiem zostaną trwale usunięte. Tej akcji nie można cofnąć.\",\n \"removeConfirmButton\": \"Usuń\",\n \"deleteError\": \"Nie można usunąć języka {language}. Spróbuj ponownie.\",\n \"noLanguages\": \"Brak skonfigurowanych języków.\",\n \"progressLabel\": \"Postęp\",\n \"levelLabel\": \"Poziom\",\n \"xpLabel\": \"Łączne XP\",\n \"streakLabel\": \"Seria\",\n \"lessonsLabel\": \"Lekcje\",\n \"flashcardsLabel\": \"Fiszki\",\n \"viewDetails\": \"Zobacz szczegóły\",\n \"supportedLanguages\": \"Dostępne języki\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Angielski amerykański\",\n \"en-GB\": \"Angielski brytyjski\",\n \"es-ES\": \"Hiszpański\",\n \"it-IT\": \"Włoski\",\n \"pt-PT\": \"Portugalski\",\n \"fr-FR\": \"Francuski\",\n \"de-DE\": \"Niemiecki\",\n \"ja-JP\": \"Japoński\",\n \"ko-KR\": \"Koreański\",\n \"zh-CN\": \"Chiński kontynentalny\",\n \"en\": \"angielski\",\n \"es\": \"hiszpański\",\n \"it\": \"włoski\",\n \"pt\": \"portugalski\",\n \"fr\": \"francuski\",\n \"de\": \"niemiecki\",\n \"ja\": \"japoński\",\n \"ko\": \"koreański\",\n \"zh\": \"chiński\",\n \"es-ES-description\": \"Hiszpański używany w Hiszpanii.\",\n \"it-IT-description\": \"Włoski używany we Włoszech.\",\n \"pt-PT-description\": \"Portugalski używany w Portugalii.\",\n \"en-US-description\": \"Angielski używany w Stanach Zjednoczonych.\",\n \"en-GB-description\": \"Angielski używany w Wielkiej Brytanii.\",\n \"fr-FR-description\": \"Francuski używany we Francji.\",\n \"de-DE-description\": \"Niemiecki używany w Niemczech.\",\n \"ja-JP-description\": \"Japoński używany w Japonii.\",\n \"ko-KR-description\": \"Koreański używany w Korei Południowej.\",\n \"zh-CN-description\": \"Mandaryński chiński z Chin kontynentalnych, z uproszczonymi znakami.\"\n },\n \"onboarding\": {\n \"title\": \"Wybierz swój język\",\n \"subtitle\": \"Którego języka chcesz się uczyć?\",\n \"chooseVariant\": \"Wybierz wariant\",\n \"continue\": \"Kontynuuj\",\n \"saveFailed\": \"Nie udało się zapisać preferencji\",\n \"goals\": {\n \"title\": \"Twoje cele nauki\",\n \"subtitle\": \"Do czego chcesz używać angielskiego? Zaznacz wszystkie, które dotyczą Ciebie.\",\n \"skip\": \"Pominąć\",\n \"travel\": \"Podróże i turystyka\",\n \"work\": \"Praca i kariera\",\n \"academic\": \"Studia i akademia\",\n \"daily\": \"Codzienna rozmowa\",\n \"media\": \"Filmy, muzyka i seriale\",\n \"emigration\": \"Życie za granicą\",\n \"exams\": \"Egzaminy i certyfikaty\",\n \"social\": \"Towarzystwo\"\n },\n \"trialHeadline\": \"Bezpłatny okres próbny\",\n \"trialTitle\": \"{days} dni pełnego dostępu\",\n \"trialDesc\": \"Czat z tutorem AI, rozmowy głosowe, ćwiczenia ze słuchu i czytania. Bez zobowiązań, anuluj w dowolnym momencie.\",\n \"trialCtaMonthly\": \"Zacznij od {price}€/mies.\",\n \"trialCtaYearly\": \"Zacznij od {price}€/rok\",\n \"trialSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialNoCharge\": \"Karta wymagana. Brak opłat do końca okresu próbnego.\",\n \"trialError\": \"Nie można rozpocząć płatności. Spróbuj ponownie.\",\n \"newLanguageHeadline\": \"Jakiego nowego języka chcesz się uczyć?\",\n \"newLanguageSubtitle\": \"Nowy plan nauki zostanie utworzony dla tego języka.\"\n },\n \"tour\": {\n \"skip\": \"Pomiń\",\n \"prev\": \"Wstecz\",\n \"next\": \"Dalej\",\n \"done\": \"Zaczynamy\",\n \"step1\": {\n \"label\": \"Witaj\",\n \"title\": \"Witaj w FreeLingo\",\n \"desc\": \"FreeLingo to Twój korepetytor językowy oparty na sztucznej inteligencji. Ćwicz we własnym tempie, o dowolnej porze, przez rozmowy, lekcje i inteligentne fiszki.\"\n },\n \"step2\": {\n \"label\": \"Czat tekstowy\",\n \"title\": \"Rozmawiaj z tutorem\",\n \"desc\": \"Prowadź pisemne rozmowy z tutorem AI. Zadawaj pytania, otrzymuj poprawki i ćwicz gramatykę i słownictwo w naturalny sposób.\"\n },\n \"step3\": {\n \"label\": \"Głos\",\n \"title\": \"Mów w czasie rzeczywistym\",\n \"desc\": \"Korzystaj z trybu rozmowy głosowej, aby ćwiczyć mówiony język z transkrypcją na żywo i natychmiastową informacją zwrotną o wymowie.\"\n },\n \"step4\": {\n \"label\": \"Fiszki\",\n \"title\": \"Nie zapomnij żadnego słowa\",\n \"desc\": \"Fiszki używają algorytmu powtórek rozłożonych w czasie SM-2, dzięki czemu powtarzasz słowa dokładnie wtedy, gdy jesteś bliski ich zapomnienia.\"\n },\n \"step5\": {\n \"label\": \"Plan nauki\",\n \"title\": \"Twój spersonalizowany plan\",\n \"desc\": \"Na podstawie oceny poziomu FreeLingo tworzy ustrukturyzowany plan nauki z codziennymi lekcjami dostosowanymi do Twoich celów.\"\n },\n \"step6\": {\n \"label\": \"Ćwiczenia\",\n \"title\": \"Słuchanie & Czytanie\",\n \"desc\": \"Sprawdź swoje rozumienie dzięki ćwiczeniom generowanym przez AI. Posłuchaj fragmentu i odpowiedz na 5 pytań lub przeczytaj tekst na swoim poziomie CEFR — zdobywaj XP za każdą poprawną odpowiedź.\"\n },\n \"step7\": {\n \"label\": \"Gotowy\",\n \"title\": \"Wszystko gotowe!\",\n \"desc\": \"Zacznij od dzisiejszej lekcji, otwórz czat lub ćwicz słuchanie i czytanie — FreeLingo dostosowuje się do Twojego stylu nauki.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Wymagane Premium\",\n \"paywallTitle\": \"Odblokuj FreeLingo Premium\",\n \"paywallDesc\": \"Rozpocznij bezpłatny okres próbny na {days} dni, bez opłat dzisiaj. Anuluj kiedy chcesz.\",\n \"paywallNoCharge\": \"Karta wymagana · brak opłat do końca okresu próbnego · anuluj kiedy chcesz\",\n \"paywallSkip\": \"Kontynuuj z darmowymi funkcjami\",\n \"trialDays\": \"{days, plural, one {# dzień okresu próbnego} few {# dni okresu próbnego} many {# dni okresu próbnego} other {# dni okresu próbnego}}\",\n \"planMonthly\": \"— Zacznij za {price}€/miesiąc →\",\n \"planYearly\": \"— Zacznij za {price}€/rok →\",\n \"checkoutError\": \"Nie można uruchomić płatności. Spróbuj ponownie.\",\n \"pricingLabel\": \"Cena\",\n \"pricingTitle\": \"Prosta i przejrzysta cena\",\n \"pricingDesc\": \"7 dni gratis z subskrypcją · anuluj kiedy chcesz\",\n \"planMonthlyName\": \"Miesięczny\",\n \"planYearlyName\": \"Roczny\",\n \"bestValue\": \"Najlepsza oferta\",\n \"month\": \"miesiąc\",\n \"year\": \"rok\",\n \"ctaStart\": \"Rozpocznij bezpłatny okres próbny na {days} dni\",\n \"planFeature\": {\n \"feature1\": \"Czat z twoim tutorem AI\",\n \"feature2\": \"Rozmowy głosowe\",\n \"feature3\": \"Ćwiczenia listening\",\n \"feature4\": \"Ćwiczenia reading\",\n \"feature5\": \"2 miesiące gratis\"\n },\n \"planFreeName\": \"Darmowy\",\n \"trialBadge\": \"7 dni gratis\",\n \"ctaRegister\": \"Zacznij teraz\",\n \"everythingFree\": \"Wszystko zawarte w planie darmowym, plus:\",\n \"freeFeature\": {\n \"f1\": \"Test poziomujący & ocena\",\n \"f2\": \"Lekcje & plan nauki\",\n \"f3\": \"Gramatyka & słownictwo\",\n \"f4\": \"Panel & śledzenie postępów\",\n \"f5\": \"Fiszki & powtarzanie w odstępach\"\n },\n \"successLabel\": \"Płatność potwierdzona\",\n \"successTitle\": \"Witaj w FreeLingo Premium!\",\n \"successDesc\": \"Twoja subskrypcja jest aktywna. Ciesz się nieograniczonym dostępem do wszystkich funkcji.\",\n \"successRedirect\": \"Przekierowanie do panelu za {seconds}s...\",\n \"successCta\": \"Przejdź do panelu\",\n \"canceledLabel\": \"Płatność anulowana\",\n \"canceledTitle\": \"Nie pobrano żadnych opłat\",\n \"canceledDesc\": \"Możesz subskrybować w dowolnym momencie. Twój postęp i ustawienia są nienaruszone.\",\n \"canceledCtaDashboard\": \"Przejdź do panelu\",\n \"canceledCtaSettings\": \"Przejdź do ustawień\",\n \"section\": \"Subskrypcja\",\n \"status\": \"Status\",\n \"statusActive\": \"Aktywna\",\n \"statusCanceled\": \"Anulowana\",\n \"statusTrialing\": \"Wersja próbna\",\n \"statusPastDue\": \"Zaległa płatność\",\n \"statusNone\": \"Brak subskrypcji\",\n \"nextBilling\": \"Następna płatność\",\n \"accessUntil\": \"Dostęp do\",\n \"manage\": \"Zarządzaj subskrypcją\",\n \"subscribe\": \"Subskrybuj\",\n \"portalError\": \"Nie można otworzyć portalu rozliczeń. Spróbuj ponownie.\",\n \"openSourceTitle\": \"Otwarte źródło\",\n \"openSourceDesc\": \"Bezpłatnie hostuj na własnym serwerze\",\n \"openSourceCta\": \"Zobacz na GitHubie\",\n \"planFreeBadge\": \"Darmowy na zawsze\",\n \"priceAmount\": \"{amount} zł\",\n \"pricePerPeriod\": \" zł/{period}\",\n \"priceOriginal\": \"{price} zł / {period}\",\n \"planFreePriceLabel\": \"Darmowe\",\n \"planFreeDesc\": \"Wszystko, co potrzebne, by zacząć naukę\",\n \"planFreeCta\": \"Zacznij\"\n },\n \"whatsNew\": {\n \"title\": \"Co nowego\",\n \"version\": \"v1.8.14\",\n \"cta\": \"Rozumiem\",\n \"entry1\": {\n \"label\": \"Czytelniejszy dashboard\",\n \"desc\": \"Dashboard skupia się teraz na kolejnym kroku: lekcjach na dziś, postępie planu, postępie słownictwa i ostatnich wynikach widocznych od razu.\"\n },\n \"entry2\": {\n \"label\": \"Więcej języków do nauki\",\n \"desc\": \"Chiński kontynentalny, francuski, hiszpański, japoński, koreański, niemiecki, portugalski i włoski są już dostępne — z pełnymi ścieżkami nauki od początkującego do zaawansowanego, gramatyką, słownictwem, zwrotami, Reading, Listening i więcej. Dodaj je w Ustawienia → Moje języki.\"\n },\n \"entry3\": {\n \"label\": \"Dodaj recenzję ze swojego profilu\",\n \"desc\": \"Możesz teraz podzielić się opinią o FreeLingo bezpośrednio w Ustawienia → Profil. Twoja recenzja pomaga innym uczącym się odkryć platformę.\"\n },\n \"entry4\": {\n \"label\": \"Poprawki błędów\",\n \"desc\": \"Różne drobne poprawki błędów i ulepszenia stabilności na całej platformie.\"\n }\n },\n \"contact\": {\n \"title\": \"Kontakt\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"twoj@email.pl\",\n \"labelSubject\": \"Temat\",\n \"placeholderSubject\": \"Krótki opis Twojego pytania\",\n \"labelDescription\": \"Wiadomość\",\n \"placeholderDescription\": \"Opisz swoje pytanie lub opinię...\",\n \"send\": \"Wyślij\",\n \"sending\": \"Wysyłanie...\",\n \"sent\": \"Wiadomość wysłana\",\n \"errorGeneric\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\"\n },\n \"listening\": {\n \"title\": \"Słuchanie\",\n \"topic\": \"Temat\",\n \"listenLabel\": \"Słuchaj\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"audioError\": \"Nie można załadować audio\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"transcript\": \"Transkrypcja\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia listening\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\"\n },\n \"reading\": {\n \"title\": \"Czytanie\",\n \"topic\": \"Temat\",\n \"textLabel\": \"Tekst\",\n \"questionsLabel\": \"Pytania\",\n \"submit\": \"Prześlij odpowiedzi\",\n \"generating\": \"Generowanie ćwiczenia...\",\n \"generatingDesc\": \"AI tworzy nowe ćwiczenie. Zajmuje to około 30 sekund.\",\n \"generatingLong\": \"Trwa to dłużej niż oczekiwano...\",\n \"noExercises\": \"Brak ćwiczeń dla twojego poziomu.\",\n \"generate\": \"Generuj ćwiczenie\",\n \"alreadyAttempted\": \"To ćwiczenie zostało już ukończone.\",\n \"errorLoading\": \"Nie można załadować ćwiczenia. Spróbuj ponownie.\",\n \"errorSubmit\": \"Nie można przesłać odpowiedzi. Spróbuj ponownie.\",\n \"resultsLabel\": \"Wyniki\",\n \"review\": \"Przegląd odpowiedzi\",\n \"nextExercise\": \"Następne ćwiczenie\",\n \"viewHistory\": \"Historia\",\n \"history\": \"Historia\",\n \"historyTitle\": \"Historia czytania\",\n \"historyEmpty\": \"Brak ukończonych ćwiczeń.\",\n \"practiceMore\": \"Ćwicz\",\n \"moreInHistory\": \"+{count} więcej\",\n \"practiceAgain\": \"Ćwicz ponownie\",\n \"replayNoXp\": \"Powtórka (brak XP)\",\n \"selectWordHint\": \"Zaznacz słowo, aby zapisać je w swoim słowniku\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestie i zgłoszenia błędów\",\n \"tabFeatures\": \"Sugestie\",\n \"tabBugs\": \"Błędy\",\n \"newFeature\": \"+ Nowa sugestia\",\n \"newBug\": \"+ Zgłoś błąd\",\n \"sortBy\": \"Sortuj według\",\n \"sortVotes\": \"Najczęściej głosowane\",\n \"sortDate\": \"Najnowsze\",\n \"filterStatus\": \"Status\",\n \"filterAll\": \"Wszystkie\",\n \"noEntries\": \"Nic tu jeszcze nie ma. Bądź pierwszy!\",\n \"votes\": \"{count} głosów\",\n \"vote\": \"1 głos\",\n \"comments\": \"{count} komentarzy\",\n \"comment\": \"1 komentarz\",\n \"by\": \"przez\",\n \"statusPending\": \"Oczekuje\",\n \"statusPlanned\": \"Zaplanowane\",\n \"statusInProgress\": \"W toku\",\n \"statusDone\": \"Gotowe\",\n \"statusDeclined\": \"Odrzucone\",\n \"modalCreateTitleFeature\": \"Nowa sugestia\",\n \"modalCreateTitleBug\": \"Zgłoś błąd\",\n \"labelTitle\": \"Tytuł\",\n \"placeholderTitleFeature\": \"Opisz swoją sugestię w jednym zdaniu\",\n \"placeholderTitleBug\": \"Krótki opis błędu\",\n \"labelDescription\": \"Szczegóły\",\n \"placeholderDescriptionFeature\": \"Wyjaśnij funkcję i dlaczego byłaby przydatna\",\n \"placeholderDescriptionBug\": \"Kroki do odtworzenia, oczekiwane zachowanie, co się stało\",\n \"submit\": \"Wyślij\",\n \"submitting\": \"Wysyłanie...\",\n \"cancel\": \"Anuluj\",\n \"deleteEntry\": \"Usuń\",\n \"deleteEntryConfirmTitle\": \"Usuń wpis\",\n \"deleteEntryConfirmMessage\": \"Usunąć ten wpis? Tej operacji nie można cofnąć.\",\n \"deleteEntryConfirm\": \"Usuń\",\n \"addComment\": \"Dodaj komentarz\",\n \"commentPlaceholder\": \"Napisz komentarz...\",\n \"postComment\": \"Opublikuj\",\n \"postingComment\": \"Publikowanie...\",\n \"deleteComment\": \"Usuń\",\n \"deleteCommentConfirmTitle\": \"Usuń komentarz\",\n \"deleteCommentConfirmMessage\": \"Usunąć ten komentarz?\",\n \"deleteCommentConfirm\": \"Usuń\",\n \"loading\": \"Ładowanie...\",\n \"backToList\": \"← Wróć\",\n \"errorLoad\": \"Ładowanie nie powiodło się. Spróbuj ponownie.\",\n \"errorSubmit\": \"Wysyłanie nie powiodło się. Spróbuj ponownie.\",\n \"prevPage\": \"← Poprz.\",\n \"nextPage\": \"Nast. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nie udało się sprawdzić statusu Twojej recenzji. Spróbuj ponownie później.\",\n \"ratingRequiredError\": \"Wybierz ocenę przed wysłaniem.\",\n \"saveError\": \"Nie udało się zapisać recenzji. Spróbuj ponownie.\",\n \"eyebrow\": \"Oceń FreeLingo\",\n \"title\": \"Jakie są Twoje wrażenia?\",\n \"closeLabel\": \"Zamknij prośbę o recenzję\",\n \"checking\": \"Sprawdzanie statusu recenzji...\",\n \"ratingLabel\": \"Ocena wymagana\",\n \"ratingGroupLabel\": \"Ocena\",\n \"star\": \"gwiazdka\",\n \"stars\": \"gwiazdki\",\n \"commentLabel\": \"Komentarz opcjonalny\",\n \"commentPlaceholder\": \"Powiedz nam, co pomogło Ci w nauce.\",\n \"cancel\": \"Anuluj\",\n \"submit\": \"Wyślij\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Historie uczących się\",\n \"title\": \"Naukę widać lepiej, gdy opowiadasz o niej samodzielnie\",\n \"subtitle\": \"Recenzje uczniów, którzy już ćwiczą z Lingu na FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzja łącznie} few {# recenzje łącznie} many {# recenzji łącznie} other {# recenzji łącznie}}\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"starsLabel\": \"{rating} z 5 gwiazdek\",\n \"ratingOnly\": \"Zweryfikowana ocena FreeLingo.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzje\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Łącznie po filtrach\",\n \"approvedOnPage\": \"Zatwierdzone na stronie\",\n \"pendingOnPage\": \"Oczekujące na stronie\",\n \"filters\": \"Filtry\",\n \"approvalFilter\": \"Filtr zatwierdzenia\",\n \"allReviews\": \"Wszystkie recenzje\",\n \"pending\": \"Oczekuje\",\n \"approved\": \"Zatwierdzona\",\n \"ratingFilter\": \"Filtr oceny\",\n \"allRatings\": \"Wszystkie oceny\",\n \"starsOption\": \"{rating} gwiazdek\",\n \"clear\": \"Wyczyść\",\n \"loadError\": \"Nie udało się załadować recenzji.\",\n \"updateError\": \"Nie udało się zaktualizować recenzji.\",\n \"deleteError\": \"Nie udało się usunąć recenzji.\",\n \"loading\": \"Ładowanie recenzji...\",\n \"queue\": \"Kolejka recenzji\",\n \"total\": \"{total} łącznie\",\n \"empty\": \"Nie znaleziono recenzji.\",\n \"starsLabel\": \"{rating} gwiazdek\",\n \"learningLanguage\": \"Nauka: {language}\",\n \"ratingOnly\": \"Recenzja tylko z oceną.\",\n \"unapprove\": \"Cofnij zatwierdzenie\",\n \"approve\": \"Zatwierdź\",\n \"delete\": \"Usuń\",\n \"prev\": \"Poprzednia\",\n \"next\": \"Następna\",\n \"deleteTitle\": \"Usuń recenzję\",\n \"deleteMessage\": \"Usunąć tę recenzję? Tej akcji nie można cofnąć.\"\n },\n \"maintenance\": {\n \"label\": \"Konserwacja\",\n \"title\": \"W trakcie konserwacji\",\n \"description\": \"Ta sekcja jest tymczasowo niedostępna z powodu prac konserwacyjnych. Spróbuj ponownie później.\"\n }\n}\n"}}, "messages/fr.json": {"971f98205441f1c948de59b548acdf078929e151": {"t": 1785745300.3379548, "n": 86728, "h": "dea6495ba66e2160", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous via le formulaire de contact sur freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous via le formulaire de contact sur freelingo.app. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"freemiumTrialTitle\": \"Votre essai gratuit a commencé\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité à toutes les fonctionnalités pendant 7 jours. Sans carte. Passez à Premium à tout moment depuis le tableau de bord.\",\n \"freemiumChatLabel\": \"Chat avec le tuteur IA\",\n \"freemiumVoiceLabel\": \"Conversations vocales\",\n \"freemiumListeningLabel\": \"Exercices d'écoute\",\n \"freemiumReadingLabel\": \"Exercices de lecture\",\n \"goToDashboard\": \"Aller au tableau de bord\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceling\": \"En cours d'annulation\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.27\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}"}, "fef25a604bab60de9e99ff4f5ff38bf0e988d624": {"t": 1785749549.4214823, "n": 86728, "h": "dea6495ba66e2160", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous via le formulaire de contact sur freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous via le formulaire de contact sur freelingo.app. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"freemiumTrialTitle\": \"Votre essai gratuit a commencé\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité à toutes les fonctionnalités pendant 7 jours. Sans carte. Passez à Premium à tout moment depuis le tableau de bord.\",\n \"freemiumChatLabel\": \"Chat avec le tuteur IA\",\n \"freemiumVoiceLabel\": \"Conversations vocales\",\n \"freemiumListeningLabel\": \"Exercices d'écoute\",\n \"freemiumReadingLabel\": \"Exercices de lecture\",\n \"goToDashboard\": \"Aller au tableau de bord\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceling\": \"En cours d'annulation\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.27\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}"}, "f2eceecd45410092fb317ead6d1b5d0071042a52": {"t": 1785749550.8541188, "n": 86901, "h": "e3b542904ebcd999", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"freemiumTrialTitle\": \"Votre essai gratuit a commencé\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité à toutes les fonctionnalités pendant 7 jours. Sans carte. Passez à Premium à tout moment depuis le tableau de bord.\",\n \"freemiumChatLabel\": \"Chat avec le tuteur IA\",\n \"freemiumVoiceLabel\": \"Conversations vocales\",\n \"freemiumListeningLabel\": \"Exercices d'écoute\",\n \"freemiumReadingLabel\": \"Exercices de lecture\",\n \"goToDashboard\": \"Aller au tableau de bord\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceling\": \"En cours d'annulation\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.26\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}"}, "1e8ddfdc904ccfdff96926cdb18123cb7aeaf631": {"t": 1785749552.4324546, "n": 86902, "h": "0ed3e64f6f5d75fa", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"freemiumTrialTitle\": \"Votre essai gratuit a commencé\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité à toutes les fonctionnalités pendant 7 jours. Sans carte. Passez à Premium à tout moment depuis le tableau de bord.\",\n \"freemiumChatLabel\": \"Chat avec le tuteur IA\",\n \"freemiumVoiceLabel\": \"Conversations vocales\",\n \"freemiumListeningLabel\": \"Exercices d'écoute\",\n \"freemiumReadingLabel\": \"Exercices de lecture\",\n \"goToDashboard\": \"Aller au tableau de bord\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceling\": \"En cours d'annulation\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "70294dcef45ed11471317dabb8d84ca897cbeb09": {"t": 1785749555.1502101, "n": 86943, "h": "148c17ae9e3be71f", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"freemiumTrialTitle\": \"Votre essai gratuit a commencé\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité à toutes les fonctionnalités pendant 7 jours — sans carte. Passez à Premium à tout moment depuis le tableau de bord.\",\n \"freemiumChatLabel\": \"Chat avec le tuteur IA\",\n \"freemiumVoiceLabel\": \"Conversations vocales\",\n \"freemiumListeningLabel\": \"Exercices d'écoute\",\n \"freemiumReadingLabel\": \"Exercices de lecture\",\n \"goToDashboard\": \"Aller au tableau de bord\",\n \"upgradeLater\": \"Passer à Premium\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceling\": \"En cours d'annulation\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "0d6ad1821bcc89a6c6a70efa15344b821d8799bc": {"t": 1785749556.96252, "n": 86414, "h": "1f36834773dc3576", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceling\": \"En cours d'annulation\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "d8820fe857733e2dbd0d23e274a3d8d917e4367c": {"t": 1785749559.3395538, "n": 86366, "h": "03a30078ff86258c", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Chat avec tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouveau\",\n \"toggleSidebarShow\": \"Afficher les chats\",\n \"toggleSidebarHide\": \"Masquer les chats\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "3065af1846e36fa2534543c08aaed7ba654d353e": {"t": 1785749560.967225, "n": 86277, "h": "edf22610da36dc80", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Accès illimité — sans limites quotidiennes ni hebdomadaires\",\n \"feature2\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\",\n \"l1\": \"Chat avec le tuteur IA\",\n \"l2\": \"Conversations vocales\",\n \"l3\": \"Exercices d'écoute\",\n \"l4\": \"Exercices de lecture\",\n \"l5\": \"Essai complet de 7 jours\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Essai complet de 7 jours, puis gratuit avec des limites quotidiennes et hebdomadaires\",\n \"planFreeCta\": \"Commencer\",\n \"limitedLabel\": \"Limité\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "ebf966c2a4c19f294d1727adf4f74e1a26da7e4f": {"t": 1785749562.3819845, "n": 86113, "h": "6e68b917d54256a9", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"freemiumVoiceRemaining\": \"Voix gratuite : {remaining}/{limit} min cette semaine\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "8568bb1c72cb7373bec4b9ac11f0a7ac6d71d2b6": {"t": 1785749563.7948298, "n": 86026, "h": "013190e9dc277b2d", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, avec un forfait gratuit et des abonnements payants. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo propose un forfait gratuit avec des limites d'utilisation et des abonnements payants pour un accès illimité, disponibles en formule mensuelle ou annuelle. Le forfait gratuit inclut un essai de 7 jours en accès complet (sans moyen de paiement requis) puis des quotas quotidiens limités pour les leçons et le chat IA, ainsi que des quotas hebdomadaires pour les exercices d'écoute, de lecture et les conversations vocales. Les abonnements payants suppriment toutes les limites d'utilisation de ces fonctionnalités. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Les limites d'utilisation actuelles de votre compte sont disponibles sur votre tableau de bord.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Le forfait gratuit inclut un accès limité aux fonctionnalités d'IA avec un essai de 7 jours en accès complet pour les nouveaux utilisateurs (sans moyen de paiement requis). Les abonnements payants sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés à un forfait payant bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"freemiumTrialDesc\": \"Profitez d'un accès illimité au chat, à la voix, au listening et au reading. Essayez tout Premium gratuitement.\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallLessonsTitle\": \"Terminez des leçons en illimité\",\n \"paywallLessonsDesc\": \"Grammaire, vocabulaire, lecture et écriture — terminez autant de leçons que vous le souhaitez chaque jour.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Leçons\",\n \"listeningLabel\": \"Écoute\",\n \"readingLabel\": \"Lecture\",\n \"voiceLabel\": \"Voix (min)\",\n \"freeLimit\": \"Passer Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# jour d'essai gratuit} other {# jours d'essai gratuit}}\",\n \"trialUnlimited\": \"Accès illimité\",\n \"requiresSubscription\": \"Premium uniquement\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.25\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Essayez tout gratuitement\",\n \"desc\": \"Vous pouvez maintenant discuter avec Lingu, pratiquer l'écoute et la lecture, et essayer les conversations vocales sans saisir de données de paiement. Commencez par un essai gratuit, puis continuez à utiliser toutes les fonctionnalités avec des limites quotidiennes et hebdomadaires. Passez à la version supérieure à tout moment depuis le tableau de bord.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de la stabilité sur l'ensemble de la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "0904e8a0ea95d836f14b581eb25c06c6bd1bff57": {"t": 1785749565.3790498, "n": 84811, "h": "1a0a4981e0939856", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.24\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Notifications de feedback non lu\",\n \"desc\": \"Feedback affiche désormais un petit compteur de non-lus dans le menu latéral, pour repérer les nouvelles suggestions, les bugs et les réponses sans recevoir plus d’e-mails. Ouvrir un fil de feedback marque uniquement ce fil comme lu.\"\n },\n \"entry2\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry3\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "3b84164d91d4640be5e0e01f3f356f20d8b0c65e": {"t": 1785749566.975469, "n": 84811, "h": "12aeb4fa571be882", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"system\": \"Système\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Notifications de feedback non lu\",\n \"desc\": \"Feedback affiche désormais un petit compteur de non-lus dans le menu latéral, pour repérer les nouvelles suggestions, les bugs et les réponses sans recevoir plus d’e-mails. Ouvrir un fil de feedback marque uniquement ce fil comme lu.\"\n },\n \"entry2\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry3\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "ec43166c2232a67e76c890e328ae1ec47eaa6a02": {"t": 1785749568.6483676, "n": 84786, "h": "30f8813dd8c9ee4f", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.23\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Notifications de feedback non lu\",\n \"desc\": \"Feedback affiche désormais un petit compteur de non-lus dans le menu latéral, pour repérer les nouvelles suggestions, les bugs et les réponses sans recevoir plus d’e-mails. Ouvrir un fil de feedback marque uniquement ce fil comme lu.\"\n },\n \"entry2\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry3\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "c84f9a5120125194068516d71aabf9519eff65e9": {"t": 1785749570.0709026, "n": 84786, "h": "c3dd91022539e3ca", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.22\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Notifications de feedback non lu\",\n \"desc\": \"Feedback affiche désormais un petit compteur de non-lus dans le menu latéral, pour repérer les nouvelles suggestions, les bugs et les réponses sans recevoir plus d’e-mails. Ouvrir un fil de feedback marque uniquement ce fil comme lu.\"\n },\n \"entry2\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry3\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"unread\": \"Non lu\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "36048aeecf912987df36d7b254d1da1e4395e742": {"t": 1785749571.4770682, "n": 84762, "h": "e32322187ffa7744", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.21\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Notifications de feedback non lu\",\n \"desc\": \"Feedback affiche désormais un petit compteur de non-lus dans le menu latéral, pour repérer les nouvelles suggestions, les bugs et les réponses sans recevoir plus d’e-mails. Ouvrir un fil de feedback marque uniquement ce fil comme lu.\"\n },\n \"entry2\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry3\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "8c3d07b127cbbfa151f285b9f0231d8c268b0f80": {"t": 1785749572.881213, "n": 84438, "h": "372fb8bd845f8079", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.20\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry2\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "8e7d77f0369a67a972b41d2156c3cad3a0427256": {"t": 1785749574.4275062, "n": 85349, "h": "8ca390e105c2d391", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.20\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Démo vocale gratuite après l’évaluation\",\n \"desc\": \"Après la création de votre plan d’étude, vous pouvez essayer gratuitement une conversation vocale en temps réel avec Lingu pendant 5 minutes. À la fin de la démo, Premium débloque la pratique vocale complète et les autres modes guidés.\"\n },\n \"entry2\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry3\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry4\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry5\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "e17ab023ab6e65310c9e7d9ccf51ac7555e226c4": {"t": 1785749575.8414853, "n": 84439, "h": "8b86a2788699c56e", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, chinois continental, coréen, espagnol, français, italien, japonais, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_resources\": \"Que sont les Ressources ?\",\n \"a_resources\": \"La section Ressources rassemble du matériel de référence indépendant de votre Plan d’Étude : grammaire par niveau, ensembles de vocabulaire et phrases utiles. Vous pouvez l’utiliser à tout moment pour réviser, consulter des explications ou enrichir votre vocabulaire sans attendre une leçon quotidienne.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "bba0316c5c98a99dac52653c404635a16445d58f": {"t": 1785749577.4001966, "n": 84009, "h": "dfe12f74e084b77e", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusUnpaid\": \"Impayé\",\n \"statusPaused\": \"En pause\",\n \"statusIncomplete\": \"Paiement en attente\",\n \"statusIncompleteExpired\": \"Paiement expiré\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "462756c9f11407bfbf9cdee76297b1d2004e86d0": {"t": 1785749579.1042178, "n": 83850, "h": "ba3ec4c1b9482b8a", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successCheckingLabel\": \"Confirmation de l'abonnement\",\n \"successCheckingTitle\": \"Vérification de votre abonnement\",\n \"successCheckingDesc\": \"Cela prend généralement quelques secondes.\",\n \"successPendingLabel\": \"Presque prêt\",\n \"successPendingTitle\": \"Votre abonnement est en cours de confirmation\",\n \"successPendingDesc\": \"Votre accès Premium devrait être disponible sous peu. Sinon, vérifiez vos paramètres de facturation.\",\n \"successErrorLabel\": \"Confirmation en attente\",\n \"successErrorTitle\": \"Nous n'avons pas encore pu vérifier votre abonnement\",\n \"successErrorDesc\": \"Allez au tableau de bord et actualisez dans un instant, ou vérifiez vos paramètres de facturation.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "0fbf6f5f18c82899aff8ac2c064ce7aea23cf877": {"t": 1785749580.6654139, "n": 83145, "h": "7d316c6f810ed2f3", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\",\n \"premiumBannerPastDueTitle\": \"Paiement en attente\",\n \"premiumBannerPastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium au chat, à la conversation vocale, au reading et au listening.\",\n \"premiumBannerPastDueCta\": \"Rétablir Premium\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"updatePayment\": \"Mettre à jour le paiement\",\n \"pastDueTitle\": \"Paiement en attente\",\n \"pastDueDesc\": \"Mettez à jour votre moyen de paiement pour rétablir l'accès Premium.\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.19\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "24a06f5e50b0db5de9ada184b37575ef436b7304": {"t": 1785749582.2047362, "n": 82688, "h": "5595acdbb862d4e6", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"Lien d'invitation\",\n \"createUserBtn\": \"Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.18\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "853f31e8f535c69e56e9b5f4a354706d0daeb0a2": {"t": 1785749583.9395244, "n": 82704, "h": "f21adfc9b1da08d1", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"regenerateExercise\": \"Regénérer l’exercice\",\n \"regeneratingExercise\": \"Regénération...\",\n \"regenerateError\": \"Impossible de régénérer l’exercice. Réessaie.\",\n \"regenerateNotNeeded\": \"Cet exercice n’a pas besoin d’être régénéré.\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.18\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "5564d600b59d38e2410ee739d678073083a2080f": {"t": 1785749585.6299798, "n": 82459, "h": "2b6f35818d21655c", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.17\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}"}, "040d66f05778ba7c881763af0dd81d5d01ba15a6": {"t": 1785749587.2263658, "n": 82460, "h": "6dbebb12292e25ca", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerDescTrialUsed\": \"Activez Premium pour débloquer le chat avec Lingu, la conversation vocale, le reading et le listening.\",\n \"premiumBannerCta\": \"Essai gratuit\",\n \"premiumBannerCtaTrialUsed\": \"Voir les offres\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialTitleTrialUsed\": \"Activer FreeLingo Premium\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialDescTrialUsed\": \"Choisissez une offre pour débloquer Lingu, la pratique vocale, le listening et le reading.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaMonthlyTrialUsed\": \"Mensuel flexible · {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialCtaYearlyTrialUsed\": \"Meilleure offre · {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialNoChargeTrialUsed\": \"Vérifiez le montant avant l'abonnement. Annulez à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallDescTrialUsed\": \"Débloquez toute la pratique Premium et vérifiez le montant avant de confirmer.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallNoChargeTrialUsed\": \"Paiement sécurisé · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"pricingDescTrialUsed\": \"Choisissez mensuel ou annuel · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"ctaRegisterTrialUsed\": \"Choisir une offre\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun débit n'a été effectué\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit dans cette session · choisissez une offre à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "be4bf883c5e7363d8ff530f1ed41f610dabe0bf4": {"t": 1785749588.639614, "n": 81716, "h": "62acdd705db35390", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerCta\": \"Essai gratuit\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingLabel\": \"Prix\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"ctaStart\": \"Démarrer l'essai gratuit de {days} jours\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"everythingFree\": \"Tout ce que comprend le plan gratuit, plus :\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Votre essai gratuit est toujours disponible\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Votre progression est conservée et vous pouvez choisir une offre plus tard dans les paramètres.\",\n \"canceledCtaRetry\": \"Réessayer l'essai gratuit · {plan}\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Voir les offres\",\n \"canceledNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreePriceLabel\": \"Gratuit\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "3362c05bbad238dae72a78b4e5b0643244a1227d": {"t": 1785749590.0285473, "n": 81743, "h": "4d43db77e82dd6cd", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Débloquez conversation, listening et reading\",\n \"premiumBannerDesc\": \"Commencez par un essai gratuit et pratiquez avec Lingu par texte, voix et exercices adaptés à votre niveau.\",\n \"premiumBannerCta\": \"Essai gratuit\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialTitle\": \"Commencez par {days} jours gratuits\",\n \"trialDesc\": \"Accédez à Lingu, à la pratique vocale, au listening et au reading avant le premier paiement.\",\n \"trialCtaMonthly\": \"Essai gratuit, puis {price}€/mois\",\n \"trialCtaYearly\": \"Essai gratuit, puis {price}€/an · 2 mois offerts\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Aucun débit aujourd'hui. Carte requise, annulation possible à tout moment.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours et débloquez toute la pratique Premium avant le premier paiement.\",\n \"paywallChatTitle\": \"Pratiquez avec Lingu sans limites\",\n \"paywallChatDesc\": \"Posez des questions, recevez des corrections et gardez des conversations naturelles par texte avec votre tuteur IA.\",\n \"paywallConversationTitle\": \"Parlez en temps réel avec Lingu\",\n \"paywallConversationDesc\": \"Pratiquez l'oral avec transcription, réponses rapides et feedback pour gagner en fluidité.\",\n \"paywallListeningTitle\": \"Entraînez votre oreille à votre niveau\",\n \"paywallListeningDesc\": \"Écoutez des exercices générés par IA et adaptés à votre progression, avec correction immédiate de la compréhension.\",\n \"paywallReadingTitle\": \"Lisez des textes adaptés à votre progression\",\n \"paywallReadingDesc\": \"Améliorez votre compréhension écrite avec des textes par niveau, des questions et un feedback immédiat.\",\n \"paywallNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"paywallSkip\": \"Pas maintenant\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"Mensuel flexible · {price}€/mois →\",\n \"planYearly\": \"Meilleure offre · {price}€/an · 2 mois offerts →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingLabel\": \"Prix\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"{days} jours gratuits · aucun débit aujourd'hui · annulez à tout moment\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"ctaStart\": \"Démarrer l'essai gratuit de {days} jours\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Essai gratuit\",\n \"ctaRegister\": \"Commencer l'essai gratuit\",\n \"everythingFree\": \"Tout ce que comprend le plan gratuit, plus :\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Votre essai gratuit est toujours disponible\",\n \"canceledDesc\": \"Aucun débit n'a été effectué. Vous pouvez relancer le paiement et accéder à Lingu, à la voix, au listening et au reading avant le premier paiement.\",\n \"canceledCtaRetry\": \"Réessayer l'essai gratuit · {plan}\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Aller aux paramètres\",\n \"canceledNoCharge\": \"Aucun débit aujourd'hui · carte requise · annulez à tout moment\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreePriceLabel\": \"Gratuit\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.16\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "172e172291f0e761118e96140faa58571f82969a": {"t": 1785749591.582107, "n": 80590, "h": "4d137f778f1eea5b", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"cardProfileAccess\": \"Profil et accès\",\n \"cardSessionSecurity\": \"Session et sécurité\",\n \"cardTheme\": \"Thème\",\n \"cardConversationTiming\": \"Durée de conversation\",\n \"cardTutorVoice\": \"Voix du tuteur\",\n \"cardCurrentUsage\": \"Utilisation actuelle\",\n \"cardProductReview\": \"Avis produit\",\n \"cardCreatedBy\": \"Créé par\",\n \"cardLegalDocuments\": \"Documents légaux\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Pratiquez plus avec FreeLingo Premium\",\n \"premiumBannerDesc\": \"Accédez à Reading, Listening, au chat avec Lingu et à la conversation vocale.\",\n \"premiumBannerCta\": \"Voir les offres →\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialTitle\": \"{days} jours d'accès complet\",\n \"trialDesc\": \"Chat avec tuteur IA, conversations vocales, exercices de listening et reading. Sans engagement, annulez quand vous voulez.\",\n \"trialCtaMonthly\": \"Commencer à {price}€/mois\",\n \"trialCtaYearly\": \"Commencer à {price}€/an\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Carte requise. Aucun débit avant la fin de l'essai.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours, sans frais aujourd'hui. Annulez à tout moment.\",\n \"paywallNoCharge\": \"Carte requise · aucun débit avant la fin de l'essai · annulez à tout moment\",\n \"paywallSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"— Démarrer pour {price}€/mois →\",\n \"planYearly\": \"— Démarrer pour {price}€/an →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingLabel\": \"Prix\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"7 jours offerts avec ton abonnement · résilie quand tu veux\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"ctaStart\": \"Démarrer l'essai gratuit de {days} jours\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"7 jours gratuits\",\n \"ctaRegister\": \"Commencer\",\n \"everythingFree\": \"Tout ce que comprend le plan gratuit, plus :\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun frais n'a été prélevé\",\n \"canceledDesc\": \"Vous pouvez vous abonner à tout moment. Vos progrès et paramètres sont intacts.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Aller aux paramètres\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreePriceLabel\": \"Gratuit\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "9799a499a3e4f9ece459394c1e49459d081fb57b": {"t": 1785749592.98927, "n": 80207, "h": "0c59643c507f828d", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Pratiquez plus avec FreeLingo Premium\",\n \"premiumBannerDesc\": \"Accédez à Reading, Listening, au chat avec Lingu et à la conversation vocale.\",\n \"premiumBannerCta\": \"Voir les offres →\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"hint\": \"Indice\",\n \"showNativeHint\": \"Voir l’indice en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialTitle\": \"{days} jours d'accès complet\",\n \"trialDesc\": \"Chat avec tuteur IA, conversations vocales, exercices de listening et reading. Sans engagement, annulez quand vous voulez.\",\n \"trialCtaMonthly\": \"Commencer à {price}€/mois\",\n \"trialCtaYearly\": \"Commencer à {price}€/an\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Carte requise. Aucun débit avant la fin de l'essai.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours, sans frais aujourd'hui. Annulez à tout moment.\",\n \"paywallNoCharge\": \"Carte requise · aucun débit avant la fin de l'essai · annulez à tout moment\",\n \"paywallSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"— Démarrer pour {price}€/mois →\",\n \"planYearly\": \"— Démarrer pour {price}€/an →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingLabel\": \"Prix\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"7 jours offerts avec ton abonnement · résilie quand tu veux\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"ctaStart\": \"Démarrer l'essai gratuit de {days} jours\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"7 jours gratuits\",\n \"ctaRegister\": \"Commencer\",\n \"everythingFree\": \"Tout ce que comprend le plan gratuit, plus :\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun frais n'a été prélevé\",\n \"canceledDesc\": \"Vous pouvez vous abonner à tout moment. Vos progrès et paramètres sont intacts.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Aller aux paramètres\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreePriceLabel\": \"Gratuit\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "f922bb72c8274ae00cbc24d6b78011b6e52eb03e": {"t": 1785749594.942168, "n": 80143, "h": "7e9603ec88a31559", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Pratiquez plus avec FreeLingo Premium\",\n \"premiumBannerDesc\": \"Accédez à Reading, Listening, au chat avec Lingu et à la conversation vocale.\",\n \"premiumBannerCta\": \"Voir les offres →\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialTitle\": \"{days} jours d'accès complet\",\n \"trialDesc\": \"Chat avec tuteur IA, conversations vocales, exercices de listening et reading. Sans engagement, annulez quand vous voulez.\",\n \"trialCtaMonthly\": \"Commencer à {price}€/mois\",\n \"trialCtaYearly\": \"Commencer à {price}€/an\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Carte requise. Aucun débit avant la fin de l'essai.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours, sans frais aujourd'hui. Annulez à tout moment.\",\n \"paywallNoCharge\": \"Carte requise · aucun débit avant la fin de l'essai · annulez à tout moment\",\n \"paywallSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"— Démarrer pour {price}€/mois →\",\n \"planYearly\": \"— Démarrer pour {price}€/an →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingLabel\": \"Prix\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"7 jours offerts avec ton abonnement · résilie quand tu veux\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"ctaStart\": \"Démarrer l'essai gratuit de {days} jours\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"7 jours gratuits\",\n \"ctaRegister\": \"Commencer\",\n \"everythingFree\": \"Tout ce que comprend le plan gratuit, plus :\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun frais n'a été prélevé\",\n \"canceledDesc\": \"Vous pouvez vous abonner à tout moment. Vos progrès et paramètres sont intacts.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Aller aux paramètres\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreePriceLabel\": \"Gratuit\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.15\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}, "46d8bff56906fae0a7e4e9fecea96a283aeba7a3": {"t": 1785749597.4218652, "n": 80143, "h": "36a2ac77f59c92f1", "c": "{\n \"landing\": {\n \"hero\": \"Apprenez les langues avec un vrai partenaire de conversation vocale\",\n \"heroSub\": \"Parlez. Écoutez. Progressez.\",\n \"signIn\": \"Se connecter\",\n \"dashboard\": \"Continuer\",\n \"feature1Title\": \"Plan d'apprentissage\",\n \"feature1Desc\": \"Évaluation du niveau + plan hebdomadaire de A1 à C2. Leçons débloquées dans l'ordre, à votre rythme.\",\n \"feature2Title\": \"Tuteur IA par chat\",\n \"feature2Desc\": \"Pratiquez avec des leçons, exercices et flashcards guidés par votre tuteur. Retour à chaque étape.\",\n \"feature3Title\": \"Conversation vocale\",\n \"feature3Desc\": \"Parlez à votre tuteur en temps réel. Activation vocale, réponse instantanée, sans attendre votre tour.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exercices générés par IA à votre niveau CECRL. Écoutez un passage et répondez à 5 questions de compréhension, puis débloquez la transcription — ou lisez un texte et répondez directement. Nouveaux exercices à la demande.\",\n \"feature5Title\": \"Flashcards\",\n \"feature5Desc\": \"Révision du vocabulaire par répétition espacée. L'algorithme SM-2 planifie chaque carte au moment optimal pour maximiser la rétention à long terme.\",\n \"feature6Title\": \"Progrès et séries\",\n \"feature6Desc\": \"XP, séries quotidiennes, scores de compétences et aptitudes par unité. Suivez votre progression semaine après semaine et testez votre niveau à la fin de chaque étape CECRL.\",\n \"footer\": \"Open source · Auto-hébergez gratuitement ou abonnez-vous au service hébergé\",\n \"navFeatures\": \"Fonctionnalités\",\n \"navReviews\": \"Avis\",\n \"navPricing\": \"Tarifs\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Comment ça marche\",\n \"faqTitle\": \"Questions fréquentes\",\n \"terms\": \"CGU\",\n \"privacy\": \"Confidentialité\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"À propos\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produit\",\n \"footerLegal\": \"Mentions légales\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Chargement...\",\n \"error\": \"Erreur\",\n \"save\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"cancel\": \"Annuler\",\n \"back\": \"Retour\",\n \"done\": \"Terminé\",\n \"next\": \"Suivant\",\n \"submit\": \"Envoyer\",\n \"start\": \"Commencer\",\n \"retry\": \"Réessayer\",\n \"or\": \"ou\",\n \"appName\": \"FreeLingo\",\n \"days\": \"jours\",\n \"logout\": \"Déconnexion\",\n \"logoutConfirmTitle\": \"Déconnexion\",\n \"logoutConfirmMessage\": \"Êtes-vous sûr de vouloir vous déconnecter ?\",\n \"initializing\": \"Initialisation...\",\n \"clearFilters\": \"Effacer les filtres\",\n \"all\": \"Tous\",\n \"score\": \"Score\",\n \"complete\": \"Terminé\",\n \"checking\": \"Vérification...\",\n \"backToDashboard\": \"Retour au tableau de bord\",\n \"tagline\": \"apprentissage des langues par IA\",\n \"close\": \"Fermer\",\n \"verifyEmailBanner\": \"Veuillez vérifier votre adresse e-mail pour finaliser la configuration de votre compte.\",\n \"verifyEmailSent\": \"E-mail envoyé. Vérifiez votre boîte de réception.\",\n \"resendVerification\": \"Renvoyer l'e-mail de vérification\",\n \"saveWord\": \"Sauvegarder\",\n \"wordSaved\": \"Sauvegardé\",\n \"wordSaveError\": \"Un problème est survenu\",\n \"selectWordHint\": \"Sélectionne un mot pour l'enregistrer dans ton vocabulaire\",\n \"noActivePlan\": \"Aucun plan d'étude actif trouvé\",\n \"removeLanguageConfirmTitle\": \"Supprimer la langue\",\n \"removeLanguageConfirmMessage\": \"Toutes les données de cette langue (plan d'étude, progression, flashcards, conversations et souvenirs) seront définitivement supprimées. Cette action est irréversible.\",\n \"removeLanguageConfirmLabel\": \"Supprimer\",\n \"nativeHelpTitle\": \"Aide en {language}\",\n \"nativeHelpLoading\": \"Préparation de l'aide en {language}...\",\n \"nativeHelpShow\": \"Afficher l'aide en {language}\",\n \"nativeHelpKeyPoints\": \"Points clés\",\n \"nativeHelpCommonTraps\": \"Pièges courants\",\n \"nativeHelpMiniGlossary\": \"Mini-glossaire\",\n \"nativeHelpUsageTips\": \"Conseils d'utilisation\",\n \"nativeHelpRegisterNotes\": \"Registre\",\n \"nativeHelpPhraseNotes\": \"Notes sur les phrases\",\n \"nativeHelpStudyTips\": \"Conseils d'étude\",\n \"nativeHelpWordNotes\": \"Notes sur les mots\",\n \"nativeHelpPractice\": \"Pratique\"\n },\n \"nav\": {\n \"home\": \"Accueil\",\n \"myPlan\": \"Mon plan\",\n \"progress\": \"Progrès\",\n \"flashcards\": \"Fiches\",\n \"tutor\": \"Tuteur\",\n \"assessment\": \"Évaluation\",\n \"resources\": \"Ressources\",\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"phrasebook\": \"Phrases\",\n \"settings\": \"Paramètres\",\n \"faq\": \"FAQ\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Avis\",\n \"switchLanguage\": \"Changer de langue\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Se connecter\",\n \"subtitle\": \"Bon retour\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"submit\": \"Se connecter\",\n \"noAccount\": \"Vous n'avez pas de compte ?\",\n \"register\": \"S'inscrire\",\n \"error\": \"E-mail ou mot de passe incorrect\",\n \"emailRequired\": \"Veuillez saisir votre e-mail\",\n \"passwordRequired\": \"Veuillez saisir votre mot de passe\",\n \"loginFailed\": \"Échec de la connexion\",\n \"signingIn\": \"Connexion en cours...\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"accountCreated\": \"Compte créé. Vous pouvez maintenant vous connecter\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"register\": {\n \"title\": \"Créer un compte\",\n \"subtitle\": \"Commencer à apprendre\",\n \"username\": \"Nom d'utilisateur\",\n \"email\": \"E-mail\",\n \"password\": \"Mot de passe\",\n \"displayName\": \"Nom affiché\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"inviteToken\": \"Code d'invitation\",\n \"inviteTokenPlaceholder\": \"Entrez le code d'invitation\",\n \"submit\": \"Créer un compte\",\n \"hasAccount\": \"Vous avez déjà un compte ?\",\n \"login\": \"Se connecter\",\n \"registrationClosed\": \"Les inscriptions sont fermées. Vous avez besoin d'un code d'invitation.\",\n \"error\": \"Échec de l'inscription\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\",\n \"displayNamePlaceholder\": \"Même que le nom d'utilisateur si vide\",\n \"inviteActive\": \"Invitation active\",\n \"creatingAccount\": \"Création en cours...\",\n \"invalidEmail\": \"Veuillez entrer une adresse e-mail valide\",\n \"usernameTaken\": \"Ce nom d'utilisateur est déjà pris\",\n \"emailTaken\": \"Cette adresse e-mail est déjà enregistrée\",\n \"invalidInvite\": \"Code d'invitation invalide ou expiré\",\n \"termsAccept\": \"J'ai lu et j'accepte les\",\n \"termsLink\": \"Conditions d'utilisation\",\n \"andWord\": \"et la\",\n \"privacyLink\": \"Politique de confidentialité\",\n \"termsRequired\": \"Vous devez accepter les conditions pour continuer\",\n \"invalidPassword\": \"Le mot de passe doit comporter entre 10 et 25 caractères et inclure au moins une majuscule, un chiffre et un symbole\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\"\n },\n \"verifyEmail\": {\n \"title\": \"Vérification de l'e-mail\",\n \"loading\": \"Vérification...\",\n \"success\": \"Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.\",\n \"error\": \"Lien de vérification invalide ou expiré.\",\n \"goToLogin\": \"Aller à la connexion\"\n },\n \"forgotPassword\": {\n \"title\": \"Mot de passe oublié\",\n \"description\": \"Entrez l'e-mail de votre compte et nous vous enverrons un lien de réinitialisation.\",\n \"emailPlaceholder\": \"votre@email.com\",\n \"submit\": \"Envoyer le lien\",\n \"sending\": \"Envoi...\",\n \"sent\": \"Si cet e-mail est enregistré, un lien a été envoyé. Vérifiez votre boîte de réception.\",\n \"backToLogin\": \"Retour à la connexion\",\n \"error\": \"Une erreur s'est produite. Veuillez réessayer.\"\n },\n \"resetPassword\": {\n \"title\": \"Réinitialiser le mot de passe\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"submit\": \"Enregistrer\",\n \"saving\": \"Enregistrement...\",\n \"success\": \"Mot de passe mis à jour. Redirection...\",\n \"mismatch\": \"Les mots de passe ne correspondent pas\",\n \"tooShort\": \"Le mot de passe doit comporter au moins 8 caractères\",\n \"missingToken\": \"Lien invalide. Veuillez demander une nouvelle réinitialisation.\",\n \"error\": \"Lien invalide ou expiré\",\n \"backToLogin\": \"Retour à la connexion\"\n }\n },\n \"settings\": {\n \"title\": \"Paramètres\",\n \"sectionAccount\": \"Compte\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Changer la photo\",\n \"avatarRemove\": \"Supprimer\",\n \"avatarUploading\": \"Envoi en cours...\",\n \"avatarTypeError\": \"Seules les images JPEG et PNG sont autorisées\",\n \"avatarSizeError\": \"Image trop lourde (max 2 Mo)\",\n \"displayName\": \"Nom affiché\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Langue maternelle\",\n \"uiLocale\": \"Langue de l'interface\",\n \"uiLocaleHint\": \"Change la langue des menus et boutons. Nécessite un rechargement.\",\n \"newPassword\": \"Nouveau mot de passe\",\n \"newPasswordPlaceholder\": \"Laisser vide pour conserver\",\n \"confirmPassword\": \"Confirmer le mot de passe\",\n \"confirmPasswordPlaceholder\": \"Répéter le nouveau mot de passe\",\n \"bio\": \"À propos de vous (contexte IA)\",\n \"bioPlaceholder\": \"ex : Je suis développeur/euse et je voyage souvent pour le travail...\",\n \"bioHint\": \"Le tuteur IA utilisera ceci pour personnaliser les conversations.\",\n \"saveChanges\": \"Sauvegarder\",\n \"saving\": \"Sauvegarde...\",\n \"saved\": \"Profil mis à jour.\",\n \"passwordMismatch\": \"Les mots de passe ne correspondent pas\",\n \"saveFailed\": \"Échec de la sauvegarde\",\n \"logout\": \"Se déconnecter\",\n \"sectionAppearance\": \"Apparence\",\n \"theme\": \"Thème\",\n \"darkActive\": \"Mode sombre actif\",\n \"lightActive\": \"Mode clair actif\",\n \"systemActive\": \"Automatique (système)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Sombre\",\n \"themeLight\": \"Clair\",\n \"switchToLight\": \"Passer au clair\",\n \"switchToDark\": \"Passer au sombre\",\n \"sectionConversation\": \"Conversation\",\n \"conversationMaxDuration\": \"Durée max. de session\",\n \"conversationInactivityTimeout\": \"Délai d'inactivité\",\n \"min15\": \"15 minutes\",\n \"min30\": \"30 minutes\",\n \"min1\": \"1 minute\",\n \"min3\": \"3 minutes\",\n \"min5\": \"5 minutes\",\n \"saveConversation\": \"Enregistrer\",\n \"conversationSaved\": \"Paramètres de conversation enregistrés.\",\n \"sectionLegal\": \"Légal\",\n \"termsOfService\": \"Conditions d'utilisation\",\n \"privacyPolicy\": \"Politique de confidentialité\",\n \"sectionAuthor\": \"Auteur\",\n \"authorDescription\": \"Créé par Arturo Carretero Calvo\",\n \"websiteLink\": \"Site web\",\n \"githubProfile\": \"Profil GitHub\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Supprimer le compte\",\n \"deleteAccountTitle\": \"Supprimer le compte\",\n \"deleteAccountMessage\": \"Cette action supprimera définitivement votre compte et toutes vos données. Cette action est irréversible.\",\n \"deleteAccountConfirm\": \"Supprimer le compte\",\n \"sectionUsageLimits\": \"Limites d'utilisation\",\n \"sectionVoice\": \"Voix\",\n \"voiceHint\": \"Choisissez votre voix préférée dans le menu déroulant, puis cliquez sur Lire pour la prévisualiser.\",\n \"voicePlay\": \"Lire\",\n \"voiceStop\": \"Arrêter\",\n \"quotaSessions\": \"Sessions / semaine\",\n \"quotaMinutesDay\": \"Minutes / jour\",\n \"quotaMinutesWeek\": \"Minutes / semaine\",\n \"quotaTokens\": \"Tokens / mois\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaLoading\": \"Chargement...\",\n \"quotaHint\": \"L'utilisation se réinitialise chaque semaine (sessions et minutes) et chaque mois (tokens).\",\n \"sectionMemory\": \"Mémoire\",\n \"memoryEmpty\": \"Aucun souvenir enregistré pour l'instant. Le tuteur IA mémorisera les détails importants vous concernant et les sauvegardera ici.\",\n \"memoryClearAll\": \"Effacer tous les souvenirs\",\n \"memoryClearAllTitle\": \"Effacer tous les souvenirs\",\n \"memoryClearAllMessage\": \"Cela supprimera définitivement tous les souvenirs enregistrés. Cette action est irréversible.\",\n \"memoryClearAllConfirm\": \"Tout effacer\",\n \"memoryManage\": \"Gérer les souvenirs\",\n \"sectionLanguages\": \"Langues\",\n \"languagesManage\": \"Mes langues\",\n \"sectionReview\": \"Avis\",\n \"reviewDescription\": \"Partagez votre expérience avec FreeLingo. Si vous modifiez un avis déjà approuvé, il sera de nouveau examiné avant d'apparaître publiquement.\",\n \"reviewPending\": \"En attente d'approbation\",\n \"reviewUpdate\": \"Mettre à jour\",\n \"reviewSaved\": \"Avis enregistré.\",\n \"reviewDelete\": \"Supprimer l'avis\",\n \"reviewDeleteTitle\": \"Supprimer l'avis\",\n \"reviewDeleteMessage\": \"Voulez-vous supprimer votre avis ? Cette action est irréversible.\",\n \"reviewDeleteConfirm\": \"Supprimer\",\n \"reviewDeleted\": \"Avis supprimé.\",\n \"reviewDeleteError\": \"Impossible de supprimer votre avis. Veuillez réessayer.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Conditions d'utilisation\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. À propos de FreeLingo\",\n \"s1Body\": \"FreeLingo est une plateforme d'apprentissage des langues propulsée par l'IA, disponible en deux modes : (1) auto-hébergé, où vous l'exécutez sur votre propre infrastructure sans frais, et (2) comme service hébergé opéré par l'équipe FreeLingo, disponible via abonnement payant. En utilisant ce service dans l'un ou l'autre mode, vous acceptez ces Conditions d'utilisation.\",\n \"s2Title\": \"2. Utilisation acceptable\",\n \"s2Intro\": \"Vous ne pouvez utiliser FreeLingo qu'à des fins personnelles d'apprentissage des langues. Vous acceptez de ne pas :\",\n \"s2i1\": \"Tenter d'obtenir un accès non autorisé à toute partie du système.\",\n \"s2i2\": \"Télécharger du contenu malveillant ou tenter de perturber le service.\",\n \"s2i3\": \"Partager vos identifiants de compte avec des tiers.\",\n \"s2i4\": \"Utiliser des scripts automatisés ou des bots pour abuser des fonctions de tutorat IA.\",\n \"s3Title\": \"3. Comptes utilisateurs\",\n \"s3Body\": \"Vous devez avoir au moins 16 ans pour créer un compte et utiliser FreeLingo. En vous inscrivant, vous confirmez que vous remplissez cette condition d'âge. Si nous apprenons qu'un compte appartient à une personne de moins de 16 ans, nous le supprimerons ainsi que toutes les données associées sans préavis. Vous êtes responsable de la confidentialité de vos identifiants et de toutes les activités effectuées sous votre compte. L'opérateur de l'instance — vous-même pour les déploiements auto-hébergés, ou l'équipe FreeLingo pour le service hébergé — peut suspendre ou résilier les comptes qui enfreignent ces conditions.\",\n \"s4Title\": \"4. Contenu et interactions avec l'IA\",\n \"s4Body\": \"Les conversations avec le tuteur IA sont stockées dans la base de données pour la continuité de l'apprentissage. Dans le service hébergé, le chat et les fonctionnalités vocales sont traités via l'API d'OpenAI, et votre contenu est soumis aux politiques d'utilisation d'OpenAI. L'IA peut produire des réponses inexactes — faites toujours preuve de discernement. FreeLingo n'est pas responsable du contenu généré par les modèles de langage sous-jacents. Le contenu généré par le tuteur IA (exercices, corrections, explications et autres supports) vous appartient pour votre usage personnel. FreeLingo ne revendique aucun droit de propriété sur vos conversations ni sur le contenu généré à partir de celles-ci.\",\n \"s5Title\": \"5. Modalités du service\",\n \"s5Body\": \"Les déploiements auto-hébergés sont gratuits et l'opérateur conserve le contrôle total de ses données et de son infrastructure. Le service hébergé opéré par l'équipe FreeLingo est proposé via un abonnement payant, disponible en formule mensuelle ou annuelle. Dans le service hébergé, vos données sont stockées sur des serveurs opérés par l'équipe FreeLingo. Le service hébergé applique des limites d'utilisation aux fonctionnalités de tutorat IA ; votre utilisation actuelle est disponible dans les paramètres du compte.\",\n \"s6Title\": \"6. Abonnement et facturation\",\n \"s6Body\": \"Les abonnements sont disponibles en cycle de facturation mensuel ou annuel et se renouvellent automatiquement sauf annulation avant la date de renouvellement. Les nouveaux abonnés bénéficient d'une période d'essai gratuite (coordonnées de paiement requises ; aucun prélèvement n'est effectué pendant l'essai). Vous pouvez annuler à tout moment depuis les paramètres de votre compte, avec effet à la fin de la période de facturation en cours. Si vous annulez dans les 14 jours suivant votre premier paiement et n'avez pas utilisé le service de manière significative, vous pouvez demander un remboursement complet au titre du droit de rétractation de l'UE. Aucun remboursement partiel n'est accordé pour le temps non utilisé au-delà de ce droit. Les prix actuels des abonnements sont affichés lors du paiement.\",\n \"s7Title\": \"7. Disponibilité\",\n \"s7Body\": \"Ce service est fourni sans garantie de disponibilité. L'opérateur peut suspendre ou interrompre le service pour maintenance, mises à jour ou toute autre raison, avec un préavis raisonnable dans la mesure du possible.\",\n \"s8Title\": \"8. Limitation de responsabilité\",\n \"s8Body\": \"FreeLingo et ses contributeurs ne sont pas responsables des dommages directs, indirects, accessoires ou consécutifs découlant de votre utilisation ou de l'impossibilité d'utiliser ce service. Dans la limite maximale autorisée par la loi applicable, la responsabilité totale ne dépassera pas le montant payé par vous au cours des trois mois précédant la réclamation. Vous acceptez d'indemniser et de dégager de toute responsabilité FreeLingo et ses contributeurs contre toute réclamation, dommage ou dépense de tiers découlant de votre utilisation du service en violation des présentes conditions.\",\n \"s9Title\": \"9. Droit applicable\",\n \"s9Body\": \"Ces conditions sont régies par le droit espagnol. Tout litige découlant de ces conditions sera soumis à la juridiction exclusive des tribunaux espagnols, sauf si la législation sur la protection des consommateurs de votre pays de résidence prévoit le contraire.\",\n \"s10Title\": \"10. Modifications des conditions\",\n \"s10Body\": \"Ces conditions peuvent être mises à jour à tout moment. Nous informerons les utilisateurs des modifications importantes via l'interface du service. L'utilisation continue du service après les modifications vaut acceptation des conditions révisées.\",\n \"s11Title\": \"11. Divisibilité\",\n \"s11Body\": \"Si une disposition des présentes conditions est jugée invalide ou inapplicable par un tribunal compétent, cette disposition sera limitée ou supprimée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkPrivacy\": \"Politique de confidentialité\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\",\n \"linkContact\": \"Pour toute question concernant ces conditions, contactez-nous à contacto@arturocarreterocalvo.com.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politique de confidentialité\",\n \"updated\": \"Dernière mise à jour : juin 2026\",\n \"s1Title\": \"1. Aperçu\",\n \"s1Body\": \"FreeLingo est disponible en tant qu'application auto-hébergée et en tant que service hébergé. Pour les déploiements auto-hébergés, toutes les données sont stockées exclusivement sur le serveur de l'opérateur et les auteurs du projet FreeLingo n'y ont pas accès. Pour le service hébergé, l'équipe FreeLingo agit en tant que responsable du traitement et cette politique décrit comment vos données personnelles sont collectées, utilisées et protégées.\",\n \"s2Title\": \"2. Données collectées\",\n \"s2Intro\": \"FreeLingo ne s'adresse pas aux enfants de moins de 16 ans. Nous ne collectons pas sciemment de données personnelles auprès de personnes de moins de 16 ans. Si vous avez moins de 16 ans, ne créez pas de compte et ne fournissez aucune donnée personnelle. Lorsque vous créez un compte et utilisez FreeLingo, les données suivantes sont stockées :\",\n \"s2i1\": \"Nom d'utilisateur, nom d'affichage et adresse e-mail.\",\n \"s2i2\": \"Mot de passe haché (bcrypt — votre mot de passe en clair n'est jamais stocké).\",\n \"s2i3\": \"Préférence de langue maternelle et paramètres d'apprentissage.\",\n \"s2i4\": \"Image d'avatar de profil (optionnelle).\",\n \"s2i5\": \"Historique des chats et conversations avec le tuteur IA.\",\n \"s2i6\": \"Jeux de flashcards, progression d'étude et données de répétition espacée.\",\n \"s2i7\": \"Résultats d'évaluation et progression du programme.\",\n \"s2i8\": \"Statut d'abonnement, type de plan et identifiant client Stripe (pour les abonnés au service payant).\",\n \"s2i9\": \"Souvenirs et préférences que le tuteur IA apprend à votre sujet lors des conversations pour personnaliser les interactions futures.\",\n \"s2i10\": \"Suggestions, signalements de bugs, commentaires et votes que vous soumettez via le tableau de suggestions. Seul votre nom d'utilisateur est affiché publiquement ; tous les utilisateurs peuvent voir les suggestions et signalements publiés.\",\n \"s3Title\": \"3. Utilisation de vos données\",\n \"s3Intro\": \"Vos données sont utilisées exclusivement pour fournir l'expérience d'apprentissage FreeLingo :\",\n \"s3i1\": \"Vous authentifier et maintenir votre session.\",\n \"s3i2\": \"Personnaliser votre plan d'étude et vos interactions avec le tuteur.\",\n \"s3i3\": \"Suivre votre progression d'apprentissage au fil du temps.\",\n \"s3i4\": \"Générer des réponses contextuelles du tuteur IA.\",\n \"s3i5\": \"Mémoriser vos préférences et votre contexte pour que le tuteur IA puisse vous offrir des interactions plus personnalisées.\",\n \"s3i6\": \"Afficher et gérer les suggestions et signalements de bugs de la communauté.\",\n \"s3Footer\": \"Vos données ne sont jamais vendues, louées ou partagées avec des services de marketing tiers.\",\n \"s4Title\": \"4. Services IA externes\",\n \"s4Body\": \"Dans le service hébergé, le chat IA, la synthèse vocale (TTS) et la transcription vocale (STT) sont fournis via l'API d'OpenAI. Le contenu de vos conversations et l'audio sont envoyés à OpenAI pour traitement, conformément à la Politique de confidentialité d'OpenAI (openai.com/privacy). Le traitement des paiements est assuré par Stripe, Inc. (États-Unis) ; Stripe traite les données de paiement directement et nous ne stockons pas les données de votre carte bancaire sur nos serveurs — vos données de transaction sont soumises à la Politique de confidentialité de Stripe (stripe.com/privacy). Pour les déploiements auto-hébergés, l'opérateur choisit le fournisseur IA ; par défaut, une instance Ollama locale est utilisée et aucune donnée ne quitte le serveur.\",\n \"s5Title\": \"5. Cookies et jetons de session\",\n \"s5Body\": \"FreeLingo utilise deux cookies techniques strictement nécessaires au fonctionnement du service : un refresh_token (httpOnly, expiration 30 jours) pour l'authentification de session, et NEXT_LOCALE (expiration 1 an) pour mémoriser votre préférence de langue. Aucun cookie de suivi ou publicitaire n'est utilisé. Pour la mesure anonyme du trafic, nous utilisons Umami — un outil d'analyse auto-hébergé et open source qui n'utilise pas de cookies, ne collecte aucune donnée personnelle et conserve toutes les données sur nos serveurs.\",\n \"s6Title\": \"6. Vos droits (RGPD)\",\n \"s6Body\": \"Si vous résidez dans l'Espace économique européen, vous avez le droit d'accéder aux données personnelles que nous détenons sur vous ; de demander la correction de données inexactes ; de demander la suppression de votre compte et de toutes les données associées (disponible directement depuis la page Paramètres) ; de vous opposer au traitement ; et de demander la portabilité de vos données. Pour exercer ces droits, contactez-nous à l'adresse indiquée à la section 8 ou supprimez votre compte directement depuis paramètres. Base juridique du traitement (Art. 6(1)(b) RGPD) : nous traitons vos données personnelles car cela est nécessaire à l'exécution du contrat entre vous et nous — la fourniture du service FreeLingo. Transferts internationaux : lors de l'utilisation du service hébergé, le contenu de vos conversations et vos données audio peuvent être traités par OpenAI, Inc. (États-Unis), et les données de paiement sont traitées par Stripe, Inc. (États-Unis). Ces transferts sont réalisés dans le cadre des Clauses Contractuelles Types approuvées par la Commission européenne (Art. 46 RGPD), garantissant un niveau de protection adéquat. Droit de réclamation : vous avez le droit d'introduire une réclamation auprès de la Commission nationale de l'informatique et des libertés (CNIL — cnil.fr) ou auprès de l'autorité de contrôle de votre pays de résidence.\",\n \"s7Title\": \"7. Conservation et suppression des données\",\n \"s7Body\": \"Vos données sont conservées aussi longtemps que votre compte existe. Vous pouvez supprimer définitivement votre compte et toutes les données associées à tout moment depuis la page Paramètres. La suppression est immédiate et irréversible.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pour toute question relative à la confidentialité du service hébergé, contactez-nous à : contacto@arturocarreterocalvo.com. Pour les déploiements auto-hébergés, contactez l'administrateur de l'instance que vous utilisez. Pour les questions sur le projet open source FreeLingo, visitez le dépôt du projet sur GitHub.\",\n \"s9Title\": \"9. Divisibilité\",\n \"s9Body\": \"Si une disposition de cette politique est jugée invalide ou inapplicable, cette disposition sera limitée dans la mesure minimale nécessaire et les autres dispositions resteront pleinement en vigueur.\",\n \"linkTerms\": \"Conditions d'utilisation\",\n \"linkBack\": \"Retour à l'inscription\",\n \"linkBackSettings\": \"Retour aux paramètres\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bon retour\",\n \"streak\": \"Série\",\n \"xp\": \"XP\",\n \"level\": \"Niveau\",\n \"skills\": \"Compétences\",\n \"today\": \"Aujourd'hui\",\n \"noSkills\": \"Complétez l'évaluation pour suivre vos compétences.\",\n \"noLessons\": \"Aucune leçon prévue pour aujourd'hui.\",\n \"lessonDone\": \"fait\",\n \"startLesson\": \"Commencer\",\n \"loadingProgress\": \"Chargement des progrès...\",\n \"noLevel\": \"Aucun niveau défini pour l'instant.\",\n \"completeAssessment\": \"Faire l'évaluation\",\n \"allCaughtUp\": \"Tout à jour.\",\n \"startWithAssessment\": \"Commencez par une évaluation.\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"goToMyPlan\": \"Mon plan →\",\n \"quickActions\": \"Actions rapides\",\n \"dayProgress\": \"Jour {current} sur {total}\",\n \"skipDay\": \"Passer aujourd'hui\",\n \"pendingLessons\": \"leçons en attente\",\n \"nextStep\": \"Prochaine étape\",\n \"assessmentCreatesPlan\": \"L'évaluation détermine votre niveau et crée un plan personnalisé pour votre langue active.\",\n \"lessonReady\": \"Leçon prête\",\n \"pendingStillAvailable\": \"Vous avez {count} anciennes leçons en attente dans votre plan.\",\n \"noPendingToday\": \"Vous avez terminé les leçons du jour. Vous pouvez revoir votre plan ou pratiquer une autre activité.\",\n \"lessonsCompleted\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"exerciseStats\": \"{correct}/{total} exercices\",\n \"noExercisesYet\": \"Aucun exercice pour l'instant\",\n \"planProgress\": \"Progression du plan\",\n \"currentDay\": \"Jour actuel\",\n \"daysRemaining\": \"Jours restants\",\n \"completedToday\": \"{completed}/{total} faites\",\n \"vocabularyProgress\": \"Vocabulaire {level}\",\n \"vocabularyWords\": \"{mastered}/{total} mots\",\n \"recentPerformance\": \"Performance récente\",\n \"recentPerformanceDescription\": \"Basée sur vos dernières réponses et révisions.\",\n \"performanceNeedsPractice\": \"À pratiquer\",\n \"performanceInProgress\": \"En progression\",\n \"performanceStrong\": \"Solide\",\n \"premiumBannerTitle\": \"Pratiquez plus avec FreeLingo Premium\",\n \"premiumBannerDesc\": \"Accédez à Reading, Listening, au chat avec Lingu et à la conversation vocale.\",\n \"premiumBannerCta\": \"Voir les offres →\"\n },\n \"assessment\": {\n \"title\": \"Évaluation\",\n \"subtitle\": \"Niveau CECR\",\n \"intro\": \"Nous allons vous poser quelques questions pour déterminer votre niveau d'anglais.\",\n \"startWriting\": \"Commencer l'évaluation écrite\",\n \"startQuiz\": \"Commencer le quiz\",\n \"writing\": {\n \"title\": \"Exemple d'écriture\",\n \"submit\": \"Soumettre le texte\",\n \"placeholder\": \"Écrivez votre réponse ici...\",\n \"evaluating\": \"Évaluation...\"\n },\n \"quiz\": {\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"next\": \"Suivant\",\n \"submit\": \"Soumettre le quiz\",\n \"submitting\": \"Envoi...\"\n },\n \"result\": {\n \"title\": \"Votre niveau\",\n \"xpEarned\": \"XP gagnés\",\n \"skillsTitle\": \"Compétences\",\n \"goToPlan\": \"Voir mon plan\",\n \"generatePlan\": \"Générer un plan d'étude\"\n },\n \"currentLevel\": \"Niveau actuel\",\n \"assessedOn\": \"Évalué le\",\n \"alreadyHasPlan\": \"Vous avez déjà un plan d'étude actif. Repasser le test en créera un nouveau.\",\n \"retake\": \"Repasser l'évaluation\",\n \"evaluating\": \"Évaluation en cours...\",\n \"resultStep\": \"Résultat\",\n \"cefrLevel\": \"Niveau CECR\",\n \"overrideLevel\": \"Remplacer le niveau initial\",\n \"strengths\": \"Points forts\",\n \"needsWork\": \"À améliorer\",\n \"createPlan\": \"Créer le plan →\",\n \"creating\": \"Création en cours...\",\n \"loading\": \"Chargement...\",\n \"levelTest\": {\n \"title\": \"Test de fin de niveau\",\n \"loading\": \"Chargement des questions...\",\n \"loadingTest\": \"Chargement du test...\",\n \"submittingTest\": \"Envoi des réponses...\",\n \"question\": \"Question\",\n \"of\": \"sur\",\n \"confirm\": \"Confirmer la réponse\",\n \"nextQuestion\": \"Question suivante\",\n \"submit\": \"Soumettre le test\",\n \"result\": {\n \"title\": \"Test terminé\",\n \"recommendation\": \"Recommandation\",\n \"advance\": \"Prêt à passer au niveau suivant\",\n \"extend\": \"Continuez à votre niveau actuel\",\n \"repeat\": \"Révision du niveau actuel recommandée\",\n \"back\": \"Retour au plan\"\n }\n },\n \"suggestedLevel\": \"Suggéré {aiLevel} ; le plan utilisera {selectedLevel}\",\n \"step1\": \"Étape 1 / 3 : votre niveau\",\n \"step2\": \"Étape 2 / 3 : question {questionNumber} / {totalQuestions}\",\n \"step3\": \"Étape 3 / 3 : votre programme\",\n \"studiedBefore\": \"Avez-vous déjà étudié {language} ?\",\n \"studiedBeforeHint\": \"Cela nous aide à commencer le quiz au bon niveau.\",\n \"beginnerOption\": \"Je suis débutant complet\",\n \"beginnerOptionHint\": \"Je commencerai à A1, pas de quiz nécessaire.\",\n \"hasExperienceOption\": \"Oui, j'ai un peu d'expérience\",\n \"hasExperienceOptionHint\": \"Je passerai un court quiz adaptatif (≈12 questions).\",\n \"skills\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\"\n },\n \"howManyWeeks\": \"Combien de semaines pour le niveau {cefr_level} ?\",\n \"nWeeks\": \"{count} semaines\",\n \"intensity\": {\n \"intensive\": \"Intensif\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Détendu\",\n \"veryRelaxed\": \"Très détendu\"\n },\n \"approxLessons\": \"~{count} leçons\",\n \"daysPerWeek\": \"{count} jours/semaine\",\n \"mainGoals\": \"Objectifs principaux (sélectionnez tout ce qui s'applique)\",\n \"goals\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Niveau\",\n \"summaryDuration\": \"Durée\",\n \"summaryGoals\": \"Objectifs\",\n \"noneSelected\": \"aucun sélectionné\",\n \"buildingPlan\": \"Création du plan...\",\n \"startWarningTitle\": \"Avant de commencer\",\n \"startWarningMessage\": \"Si vous quittez l'évaluation avant de la terminer, votre progression sera perdue et vous devrez recommencer.\",\n \"startWarningMessageLevelTest\": \"Si vous quittez le test de niveau avant de le terminer, votre progression sera perdue et vous devrez le repasser.\",\n \"startWarningConfirm\": \"Commencer\",\n \"startMyPlan\": \"Démarrer mon plan\"\n },\n \"plan\": {\n \"title\": \"Mon plan\",\n \"subtitle\": \"Plan d'étude\",\n \"noPlan\": \"Aucun plan d'étude actif trouvé.\",\n \"startAssessment\": \"Faites d'abord l'évaluation\",\n \"week\": \"Semaine\",\n \"currentLesson\": \"Leçon actuelle\",\n \"startLesson\": \"Commencer la leçon\",\n \"completed\": \"Terminé\",\n \"generating\": \"Génération de la leçon...\",\n \"generatingError\": \"Échec de la génération de la leçon\",\n \"loading\": \"Chargement du plan...\",\n \"learningRoadmap\": \"Feuille de route\",\n \"level\": \"Niveau\",\n \"duration\": \"Durée\",\n \"durationDetail\": \"{weeks} semaines · {days} jours/semaine\",\n \"unitsLabel\": \"Unités\",\n \"noUnitsForLevel\": \"Aucune unité disponible pour le niveau {level}\",\n \"takeAssessmentArrow\": \"Passer l'évaluation →\",\n \"unitLabel\": \"Unité\",\n \"grammarCovered\": \"Grammaire couverte\",\n \"noLessons\": \"Aucune leçon programmée pour cette unité.\",\n \"weekDay\": \"Semaine {week}, jour {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Grammaire\",\n \"vocabulary\": \"Vocabulaire\",\n \"reading\": \"Lecture\",\n \"writing\": \"Écriture\",\n \"conversation\": \"Conversation\",\n \"review\": \"Révision\",\n \"level_test\": \"Test de niveau\"\n },\n \"levelComplete\": \"Niveau {level} terminé. Passez le test de niveau\",\n \"levelCompleteDesc\": \"Vous avez terminé toutes les unités du niveau {level}. Passez le test de fin de niveau pour confirmer vos progrès et débloquer le niveau suivant.\",\n \"levelCompleteHint\": \"Le test dure environ 20 minutes et couvre la grammaire, le vocabulaire et la lecture.\",\n \"beginLevelTest\": \"Commencer le test de niveau\",\n \"nLessons\": \"{count} leçons\",\n \"nGrammar\": \"{count} grammaire\",\n \"levelTestLabel\": \"Test de niveau\",\n \"unitAriaLabel\": \"Unité {index} : {title}\",\n \"noUnitsDesc\": \"Le contenu pour ce niveau est en cours de préparation. Revenez bientôt.\",\n \"completionTestTitle\": \"Test de fin de niveau {level}\",\n \"levelTestResult\": \"Résultat du test de niveau\",\n \"testScore\": \"Score :\",\n \"pendingLessons\": \"Leçons en attente\",\n \"resume\": \"Reprendre\",\n \"noPlanLabel\": \"COMMENCER\",\n \"noPlanTitle\": \"Créez votre plan d'étude\",\n \"noPlanDesc\": \"Faites une évaluation rapide pour découvrir votre niveau et obtenir un parcours d'apprentissage personnalisé.\",\n \"noPlanHint\": \"Prend environ 10 minutes\"\n },\n \"lesson\": {\n \"loading\": \"Chargement de la leçon...\",\n \"notFound\": \"Leçon introuvable\",\n \"backToPlan\": \"Retour au plan\",\n \"progress\": \"Progrès\",\n \"exercise\": \"Exercice\",\n \"of\": \"sur\",\n \"checkAnswer\": \"Vérifier la réponse\",\n \"nextExercise\": \"Exercice suivant\",\n \"submitWriting\": \"Soumettre l'écriture\",\n \"yourAnswer\": \"Votre réponse...\",\n \"correct\": \"Correct\",\n \"incorrect\": \"Incorrect\",\n \"feedback\": \"Retour\",\n \"completeLesson\": \"Terminer la leçon\",\n \"completing\": \"Finalisation...\",\n \"relatedGrammar\": \"Grammaire associée\",\n \"explanation\": \"Explication\",\n \"exercises\": \"Exercices\",\n \"vocabulary\": \"Vocabulaire\",\n \"label\": \"Leçon\",\n \"submitAnswer\": \"Soumettre la réponse\",\n \"lessonDone\": \"Leçon terminée\",\n \"score\": \"Score\",\n \"showNativeExplanation\": \"Voir en\",\n \"examples\": \"Exemples\",\n \"commonTraps\": \"Erreurs fréquentes\",\n \"miniGlossary\": \"Mini-glossaire\",\n \"pronunciationExercise\": \"Prononciation\",\n \"exerciseTypeMultipleChoice\": \"Choix multiple\",\n \"exerciseTypeFillBlank\": \"Texte à trous\",\n \"exerciseTypeFreeWrite\": \"Rédaction libre\",\n \"exerciseTypePronunciation\": \"Prononciation\",\n \"tapToListen\": \"Appuyer pour écouter\",\n \"recordNow\": \"Enregistrez votre réponse\",\n \"exit\": \"Quitter\",\n \"exitConfirmTitle\": \"Quitter la leçon ?\",\n \"exitConfirmMessage\": \"Votre progression sur cette leçon sera perdue.\",\n \"dayComplete\": \"Journée terminée !\",\n \"dayCompleteMsg\": \"Toutes les leçons d'aujourd'hui sont terminées.\"\n },\n \"flashcards\": {\n \"title\": \"Fiches\",\n \"due\": \"À revoir\",\n \"total\": \"Total\",\n \"noDue\": \"Aucune carte à réviser\",\n \"allCaughtUp\": \"Tout est à jour !\",\n \"generate\": \"Générer des fiches\",\n \"generating\": \"Génération...\",\n \"topic\": \"Sujet\",\n \"topicPlaceholder\": \"ex. vocabulaire de voyage\",\n \"count\": \"Quantité\",\n \"level\": \"Niveau\",\n \"submit\": \"Générer\",\n \"again\": \"À revoir\",\n \"hard\": \"Difficile\",\n \"good\": \"Bien\",\n \"easy\": \"Facile\",\n \"front\": \"Mot\",\n \"back\": \"Définition\",\n \"loading\": \"Chargement des fiches...\",\n \"sectionGenerate\": \"Générer de nouvelles fiches\",\n \"speakingMode\": \"Expression orale\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Dites le mot à voix haute\",\n \"refresh\": \"Actualiser\",\n \"generateBtn\": \"Générer\",\n \"cards\": \"cartes\",\n \"myVocabularyBtn\": \"Mon vocabulaire\",\n \"myVocabulary\": \"Mon vocabulaire\",\n \"myVocabularyEmpty\": \"Aucun mot enregistré pour l’instant. Sélectionne un mot en lisant pour le sauvegarder ici.\",\n \"myVocabularyNoResults\": \"Aucun mot enregistré ne correspond à votre recherche.\",\n \"vocabularySearch\": \"Rechercher des mots...\",\n \"vocabularyPageInfo\": \"Page {page} sur {pages}\",\n \"vocabularyPrev\": \"Préc.\",\n \"vocabularyNext\": \"Suiv.\",\n \"backToFlashcards\": \"Fiches\",\n \"noCardsHint\": \"Utilisez + Générer pour créer vos premières fiches avec l'IA\",\n \"tapToHide\": \"appuyez pour masquer\",\n \"tapToReveal\": \"appuyez pour afficher\",\n \"interval\": \"Intervalle\",\n \"repetitions\": \"Rép\"\n },\n \"chat\": {\n \"title\": \"Tuteur IA\",\n \"subtitle\": \"{language} — Posez n'importe quelle question\",\n \"placeholder\": \"Tapez un message...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi...\",\n \"noConversation\": \"Sélectionnez ou démarrez une conversation\",\n \"newConversation\": \"Nouvelle conversation\",\n \"conversations\": \"Conversations\",\n \"loading\": \"Chargement...\",\n \"thinking\": \"Réflexion...\",\n \"takingLonger\": \"Cela prend plus de temps que prévu...\",\n \"errorMessage\": \"Une erreur s'est produite. Veuillez réessayer.\",\n \"deleteTitle\": \"Supprimer le chat\",\n \"deleteMessage\": \"Cette conversation sera définitivement supprimée.\",\n \"deleteConfirm\": \"Supprimer\",\n \"enterToSend\": \"Entrée pour envoyer\",\n \"continueInVoice\": \"Continuer en vocal\",\n \"memoryUpdated\": \"Mémoire mise à jour\"\n },\n \"progress\": {\n \"title\": \"Progrès\",\n \"subtitle\": \"Suivi des compétences\",\n \"xp\": \"XP\",\n \"streak\": \"Série\",\n \"lessons\": \"Leçons\",\n \"accuracy\": \"Précision\",\n \"noPlan\": \"Aucun plan d'étude actif.\",\n \"startPlan\": \"Commencer l'évaluation\",\n \"competencies\": \"Compétences par unité\",\n \"vocabularySection\": \"Vocabulaire\",\n \"skills\": \"Précision par compétence\",\n \"mastered\": \"Maîtrisé\",\n \"inProgress\": \"En cours\",\n \"notStarted\": \"Non commencé\",\n \"loading\": \"Chargement des progrès...\",\n \"days\": \"jours\",\n \"noData\": \"Terminez quelques leçons pour voir vos progrès ici.\",\n \"exploreVocab\": \"Explorer le vocabulaire\",\n \"competenciesSection\": \"Compétences grammaticales {level}\",\n \"noCompetencies\": \"Terminez des leçons pour commencer à suivre vos compétences.\",\n \"goToMyPlan\": \"→ Mon plan\",\n \"addToFlashcards\": \"Ajoutez des mots d'un ensemble à votre deck pour suivre les progrès individuels.\",\n \"noActivePlanDesc\": \"Faites l'évaluation pour commencer à suivre vos compétences.\",\n \"vocabularyHeader\": \"Vocabulaire {level}\",\n \"currentLevelOnly\": \"Niveau actuel uniquement\",\n \"allLevels\": \"Tous les niveaux\"\n },\n \"grammar\": {\n \"title\": \"Grammaire\",\n \"subtitle\": \"Référence\",\n \"searchPlaceholder\": \"Rechercher des thèmes grammaticaux...\",\n \"allLevels\": \"Tous les niveaux\",\n \"allCategories\": \"Tous\",\n \"noResults\": \"Aucun thème trouvé.\",\n \"structure\": \"Structure\",\n \"keyRules\": \"Règles clés\",\n \"examples\": \"Exemples\",\n \"commonMistakes\": \"Erreurs fréquentes\",\n \"relatedTopics\": \"Thèmes associés\",\n \"backToGrammar\": \"Grammaire\",\n \"explanation\": \"Explication\",\n \"backLink\": \"Retour à la grammaire\",\n \"notFound\": \"Thème introuvable.\",\n \"topicsFound\": \"{count, plural, one {# thème trouvé} other {# thèmes trouvés}}\"\n },\n \"vocabulary\": {\n \"title\": \"Vocabulaire\",\n \"subtitle\": \"Vocabulaire\",\n \"all\": \"Tous\",\n \"searchPlaceholder\": \"Rechercher des ensembles...\",\n \"sets\": \"ensembles\",\n \"words\": \"mots\",\n \"addAll\": \"Ajouter les {count} en fiches\",\n \"adding\": \"Ajout...\",\n \"added\": \"{count} fiches ajoutées\",\n \"addError\": \"Échec de l'ajout des fiches\",\n \"frequency\": \"fréq\",\n \"backToVocabulary\": \"Vocabulaire\",\n \"notFound\": \"Ensemble introuvable.\",\n \"vocabularySet\": \"Ensemble de vocabulaire\",\n \"cardsAdded\": \"{count} fiches ajoutées à votre deck.\",\n \"goToFlashcards\": \"Aller aux fiches →\",\n \"addFailed\": \"Échec de l'ajout des fiches.\",\n \"noResults\": \"Aucun ensemble de vocabulaire ne correspond à votre recherche\"\n },\n \"phrasebook\": {\n \"title\": \"Phrases\",\n \"subtitle\": \"Phrases\",\n \"all\": \"Tous\",\n \"allRegisters\": \"Tous les registres\",\n \"formal\": \"Formel\",\n \"neutral\": \"Neutre\",\n \"informal\": \"Informel\",\n \"copied\": \"Copié !\",\n \"copy\": \"Copier\",\n \"noResults\": \"Aucune phrase ne correspond aux filtres\",\n \"level\": \"Niveau\",\n \"register\": \"Registre\",\n \"statsLine\": \"{situationCount} situations · {phraseCount} phrases · {range}\",\n \"situationsShown\": \"{count, plural, one {# situation affichée} other {# situations affichées}}\",\n \"searchPlaceholder\": \"Rechercher des phrases...\"\n },\n \"admin\": {\n \"title\": \"Administration\",\n \"overview\": \"Vue d’ensemble\",\n \"users\": \"Utilisateurs\",\n \"feedback\": \"Retours\",\n \"reviews\": \"Avis\",\n \"invites\": \"Invitations\",\n \"createUser\": \"Créer un utilisateur\",\n \"createInvite\": \"Générer une invitation\",\n \"deactivate\": \"Désactiver\",\n \"activate\": \"Activer\",\n \"loading\": \"Chargement...\",\n \"loadError\": \"Erreur lors du chargement des données\",\n \"userNotFound\": \"Utilisateur introuvable\",\n \"role\": \"Rôle\",\n \"status\": \"Statut\",\n \"active\": \"Actif\",\n \"inactive\": \"Inactif\",\n \"inviteCreated\": \"Lien d'invitation créé\",\n \"copyLink\": \"Copier le lien\",\n \"inviteCopied\": \"Lien d'invitation copié\",\n \"deleteUser\": \"Supprimer l'utilisateur\",\n \"deleteUserMessage\": \"Supprimer cet utilisateur ? Cette action est irréversible.\",\n \"deleteConfirm\": \"Supprimer\",\n \"noUsers\": \"Aucun utilisateur trouvé\",\n \"inviteLink\": \"Lien d'invitation (valide 48h)\",\n \"total\": \"total\",\n \"delete\": \"Supprimer\",\n \"inviteBtn\": \"+ Lien d'invitation\",\n \"createUserBtn\": \"+ Créer un utilisateur\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\",\n \"roleUser\": \"Utilisateur\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nom d'utilisateur\",\n \"invalidUsernameChars\": \"Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, des tirets, des tirets bas et des points\",\n \"fieldEmail\": \"Email (optionnel)\",\n \"fieldPassword\": \"Mot de passe\",\n \"fieldDisplayName\": \"Nom d'affichage\",\n \"fieldNativeLanguage\": \"Langue maternelle\",\n \"fieldTargetLanguage\": \"Langue à apprendre\",\n \"fieldRole\": \"Type de compte\",\n \"submitCreate\": \"Créer\",\n \"searchPlaceholder\": \"Rechercher par nom d'utilisateur ou email...\",\n \"statsTitle\": \"Statistiques d'utilisation\",\n \"statsCefr\": \"Niveau actuel\",\n \"statsUnit\": \"Unité actuelle\",\n \"statsPlanWeeks\": \"Durée du plan\",\n \"sectionXpProgress\": \"XP & progression\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Série\",\n \"statsActiveDays\": \"Jours actifs\",\n \"statsLessons\": \"Leçons terminées\",\n \"statsExercises\": \"Exercices corrects\",\n \"statsMessages\": \"Messages envoyés\",\n \"statsTokensTotal\": \"Tokens consommés (total)\",\n \"statsTokensChat\": \"Tokens du tuteur\",\n \"statsTokensConversation\": \"Tokens de voix\",\n \"statsTokensNote\": \"Disponible uniquement si le fournisseur IA renvoie cette information\",\n \"statsNoData\": \"Aucune donnée de progression\",\n \"viewStats\": \"Voir les stats\",\n \"weeks\": \"semaines\",\n \"statsTestScore\": \"Score du test final\",\n \"statsDays\": \"jours\",\n \"sectionQuota\": \"Quotas de conversation\",\n \"quotaWeeklySessions\": \"Limite séances hebdomadaires\",\n \"quotaDailyMinutes\": \"Limite minutes quotidiennes\",\n \"quotaWeeklyMinutes\": \"Limite de minutes hebdomadaires\",\n \"quotaUnlimitedLabel\": \"Illimité (0)\",\n \"quotaUsedSessions\": \"Utilisées cette semaine\",\n \"quotaUsedMinutes\": \"Utilisées aujourd'hui\",\n \"quotaUsedWeeklyMinutes\": \"Utilisées cette semaine (min)\",\n \"quotaSave\": \"Enregistrer les quotas\",\n \"quotaSaved\": \"Quotas enregistrés.\",\n \"emailVerified\": \"E-mail vérifié\",\n \"emailNotVerified\": \"E-mail non vérifié\",\n \"verifyEmail\": \"Vérifier l'e-mail\",\n \"unverifyEmail\": \"Marquer comme non vérifié\",\n \"emailVerifiedSuccess\": \"E-mail marqué comme vérifié.\",\n \"emailUnverifiedSuccess\": \"E-mail marqué comme non vérifié.\",\n \"quotaMonthlyTokens\": \"Limite mensuelle de tokens\",\n \"fieldSubscription\": \"Abonnement\",\n \"fieldEndsRenews\": \"Fin / renouvellement\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mode maintenance\",\n \"maintenanceOn\": \"ACTIF\",\n \"maintenanceEnable\": \"Activer la maintenance\",\n \"maintenanceDisable\": \"Désactiver la maintenance\",\n \"maintenanceDesc\": \"Lorsqu'il est activé, toutes les fonctionnalités réservées aux abonnés (chat, conversations vocales, exercices d'écoute et de lecture) seront indisponibles pour tous les utilisateurs.\",\n \"cannotDeactivateSelf\": \"Impossible de désactiver votre propre compte\",\n \"cannotDeleteSelf\": \"Impossible de supprimer votre propre compte\",\n \"sectionLanguages\": \"Langues\",\n \"sectionActivity\": \"Activité\",\n \"statsActive\": \"Actif\",\n \"manageUsers\": \"Gérer les utilisateurs\",\n \"manageUsersDesc\": \"Consultez les comptes, les abonnements, les rôles et l’état d’accès.\",\n \"createUserDesc\": \"Crée un compte utilisateur géré avec une langue d’étude initiale.\",\n \"reviewFeedback\": \"Examiner les retours\",\n \"reviewFeedbackDesc\": \"Trier les demandes de fonctionnalités et les rapports de bugs des apprenants.\",\n \"reviewReviews\": \"Examiner les avis\",\n \"reviewReviewsDesc\": \"Approuvez les avis vérifiés des apprenants pour les afficher sur la page d’accueil.\",\n \"maintenanceOnDesc\": \"Le mode maintenance est actif pour les outils d’apprentissage soumis à abonnement.\",\n \"maintenanceOffDesc\": \"Le mode maintenance est désactivé. Les outils soumis à abonnement sont disponibles.\",\n \"openSystemControls\": \"Contrôles système\",\n \"adminRequired\": \"Accès administrateur requis\",\n \"usersLoadError\": \"Impossible de charger les utilisateurs\",\n \"createUserError\": \"Impossible de créer l’utilisateur\",\n \"updateUserError\": \"Impossible de mettre à jour l’utilisateur\",\n \"deleteUserError\": \"Impossible de supprimer l’utilisateur\",\n \"inviteError\": \"Impossible de générer le lien d’invitation\",\n \"copyInviteError\": \"Impossible de copier le lien d’invitation\",\n \"maintenanceError\": \"Impossible de mettre à jour le mode maintenance\",\n \"maintenanceOff\": \"DÉSACTIVÉ\",\n \"inviteExpiry\": \"Lien à usage unique. Expire après 48 heures.\",\n \"searchAction\": \"Rechercher des utilisateurs\",\n \"roleFilter\": \"Filtrer par rôle\",\n \"statusFilter\": \"Filtrer par statut\",\n \"subscriptionFilter\": \"Filtrer par abonnement\",\n \"allRoles\": \"Tous les rôles\",\n \"allStatuses\": \"Tous les statuts\",\n \"allSubscriptions\": \"Tous les abonnements\",\n \"clearFilters\": \"Effacer\",\n \"userColumn\": \"Utilisateur\",\n \"actions\": \"Opérations\",\n \"createUserSheetDesc\": \"Le compte est créé immédiatement. La vérification par e-mail est envoyée lorsque l’e-mail est activé.\",\n \"activateUser\": \"Activer l’utilisateur\",\n \"deactivateUser\": \"Désactiver l’utilisateur\",\n \"activateUserMessage\": \"Activer ce compte utilisateur ?\",\n \"deactivateUserMessage\": \"Désactiver ce compte utilisateur ? Il ne pourra pas utiliser l’application tant qu’il ne sera pas réactivé.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Langues\",\n \"tabActivity\": \"Activité\",\n \"tabQuota\": \"Limites\",\n \"tabSubscription\": \"Abonnement\",\n \"sectionCommunication\": \"Coordonnées\",\n \"quotaCurrentUsage\": \"Utilisation actuelle\",\n \"quotaConfiguredLimits\": \"Limites configurées\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"séances\",\n \"unitTokens\": \"jetons\",\n \"quotaZeroMeansUnlimited\": \"Définissez une limite à 0 pour un accès illimité.\",\n \"quotaValidationError\": \"Toutes les valeurs de quota doivent être des nombres entiers supérieurs ou égaux à 0.\",\n \"quotaSaveError\": \"Impossible d’enregistrer les limites de quota.\",\n \"subscriptionOverride\": \"Remplacement manuel de l’abonnement\",\n \"subscriptionOverrideDesc\": \"Cela modifie directement la période d’accès de l’utilisateur et peut remplacer l’état géré par Stripe.\",\n \"subscriptionUpdateError\": \"Impossible de mettre à jour l’abonnement.\",\n \"saving\": \"Enregistrement...\",\n \"verifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme vérifiée ?\",\n \"unverifyEmailConfirmMessage\": \"Marquer cette adresse e-mail comme non vérifiée ?\",\n \"subscriptionConfirmTitle\": \"Modifier l’abonnement\",\n \"subscriptionConfirmMessage\": \"Appliquer le plan d’abonnement : {plan} ?\",\n \"subscriptionConfirm\": \"Appliquer\",\n \"feedbackStatusError\": \"Impossible de mettre à jour le statut du retour.\",\n \"feedbackDeleteError\": \"Impossible de supprimer l’entrée de retour.\",\n \"allFeedback\": \"Tous les retours\",\n \"feedbackTotal\": \"Total des retours\",\n \"feedbackQueue\": \"File des retours\",\n \"feedbackSearchPlaceholder\": \"Rechercher par titre, description ou auteur...\",\n \"feedbackSearchAction\": \"Rechercher des retours\",\n \"feedbackTypeFilter\": \"Filtrer par type de retour\",\n \"noFilteredFeedback\": \"Aucun retour ne correspond aux filtres actuels.\",\n \"feedbackItem\": \"Entrée\",\n \"type\": \"Type\",\n \"signals\": \"Indicateurs\",\n \"feedbackStatusAction\": \"Modifier le statut du retour\",\n \"adminStatsError\": \"Impossible de charger les métriques d’administration.\",\n \"activeUsers\": \"Utilisateurs actifs\",\n \"paidAccess\": \"Actifs / essai\",\n \"pendingFeedback\": \"Retours en attente\",\n \"pendingReviews\": \"Avis en attente d’approbation\",\n \"operationalAlerts\": \"Alertes opérationnelles\",\n \"pendingBugs\": \"Bugs en attente\",\n \"pendingBugsDesc\": \"Rapports de bugs en attente de triage administrateur.\",\n \"pastDueSubscriptions\": \"Abonnements en retard\",\n \"pastDueSubscriptionsDesc\": \"Comptes avec des problèmes de paiement pouvant nécessiter une vérification.\"\n },\n \"faq\": {\n \"title\": \"FAQ\",\n \"subtitle\": \"Questions fréquentes\",\n \"q_start\": \"Par où commencer ?\",\n \"a_start\": \"Commencez par l’Évaluation. Elle détecte votre niveau d’anglais (A1–C2) ainsi que vos points forts et faibles. Avec ce résultat, vous pouvez générer un Plan d’Étude personnalisé qui remplit votre tableau de bord de leçons quotidiennes. Sans l’Évaluation, le tableau de bord est vide.\",\n \"q_workflow\": \"Quel est le flux de travail complet ?\",\n \"workflowStep1\": \"Inscrivez-vous et sélectionnez votre langue maternelle\",\n \"workflowStep2\": \"Passez l’Évaluation → votre niveau CECR est détecté\",\n \"workflowStep3\": \"Générez votre Plan d’Étude depuis le tableau de bord\",\n \"workflowStep4\": \"Complétez vos leçons quotidiennes (bouton DÉMARRER dans le tableau de bord)\",\n \"workflowStep5\": \"Utilisez les Fiches pour entraîner le vocabulaire en parallèle\",\n \"workflowStep6\": \"Pratiquez la conversation libre avec le Tuteur IA\",\n \"q_language\": \"Quelle langue vais-je apprendre ?\",\n \"a_language\": \"FreeLingo prend actuellement en charge plusieurs langues (allemand, anglais américain, anglais britannique, espagnol, français, italien, portugais), et nous en ajouterons d'autres au fil du temps. Lorsqu'une nouvelle langue sera disponible, vous la trouverez dans Paramètres → Mes langues — ajoutez-la et commencez à apprendre tout de suite.\",\n \"q_assessment\": \"Qu’est-ce que l’Évaluation ?\",\n \"a_assessment\": \"Un test de 15 questions généré par IA couvrant la grammaire, le vocabulaire, la compréhension écrite et la transformation de phrases, avec une difficulté allant de A1 à C1. À la fin, vous obtenez votre niveau CECR, un score et une analyse de vos forces et faiblesses. Ce résultat alimente le Plan d’Étude et les Fiches générées.\",\n \"q_studyPlan\": \"Qu’est-ce que le Plan d’Étude et comment en générer un ?\",\n \"a_studyPlan\": \"Après l'Évaluation, allez au tableau de bord et cliquez sur Générer le Plan d'Étude. Un plan semaine par semaine avec des leçons quotidiennes adaptées à votre niveau CECR et vos objectifs sera créé automatiquement. Chaque leçon comprend des exercices à choix multiples et d'écriture libre évalués par IA.\",\n \"q_flashcards\": \"À quoi servent les Fiches ?\",\n \"a_flashcards\": \"Un système d’entraînement au vocabulaire utilisant l’algorithme de répétition espacée SM-2. Générez des fiches sur n’importe quel sujet (ex. « business », « phrasal verbs », « nourriture ») avec une définition, une phrase d’exemple et une traduction dans votre langue maternelle. Le système calcule quand réafficher chaque fiche juste avant que vous l’oubliiez. Complètement indépendant du Plan d’Étude.\",\n \"q_vocabulary\": \"Comment ajouter des mots à mon vocabulaire ?\",\n \"a_vocabulary\": \"Vous pouvez enregistrer des mots de deux façons : (1) Pendant que vous lisez une leçon, un exercice d'écoute ou discutez avec le tuteur, sélectionnez un mot avec la souris et cliquez sur Sauvegarder dans l'infobulle qui apparaît — l'IA générera une définition, une phrase d'exemple et une traduction dans votre langue maternelle. (2) Allez dans Vocabulaire, ouvrez un ensemble de vocabulaire pour votre niveau et cliquez sur Ajouter pour importer tout l'ensemble d'un coup. Vos mots enregistrés apparaissent dans Mon vocabulaire sous la section Fiches.\",\n \"q_tutor\": \"Comment fonctionne le Tuteur IA ?\",\n \"a_tutor\": \"Un chat libre avec streaming. Le tuteur connaît votre niveau CECR et vos points faibles pour adapter ses réponses. Posez des questions de grammaire, demandez des explications, entraînez-vous à écrire en anglais ou discutez simplement. Les conversations sont sauvegardées et accessibles depuis la barre latérale entre sessions.\",\n \"q_voice\": \"Comment fonctionne la conversation vocale ?\",\n \"a_voice\": \"Le mode Conversation vocale vous permet de parler avec le tuteur IA en temps réel. Appuyez sur Démarrer pour commencer — l'application détecte votre voix automatiquement grâce à la détection d'activité vocale (VAD) et le tuteur répond avec de la synthèse vocale. Vous pouvez interrompre le tuteur à tout moment (barge-in). La session se termine lorsque vous atteignez la limite de temps ou appuyez sur Arrêter. Assurez-vous que votre navigateur a la permission d'accéder au microphone.\",\n \"q_listening\": \"Comment fonctionnent les exercices de compréhension orale ?\",\n \"a_listening\": \"La section Listening génère de courts extraits audio à votre niveau CEFR, synthétisés par IA. Écoutez l'audio puis répondez à 5 questions de compréhension. Après avoir envoyé vos réponses, vous obtenez votre score (0–5), des XP, les bonnes réponses et la transcription complète. Vous pouvez générer de nouveaux exercices à la demande.\",\n \"q_reading\": \"Comment fonctionnent les exercices de lecture ?\",\n \"a_reading\": \"La section Reading génère des textes à votre niveau CEFR : avis, e-mails, articles, billets de blog, etc. Lisez le texte et répondez à 5 questions à choix multiple. Après avoir envoyé vos réponses, vous obtenez votre score (0–5) et des XP. De nouveaux exercices peuvent être générés à la demande.\",\n \"q_providers\": \"Quels fournisseurs d’IA FreeLingo prend-il en charge ?\",\n \"a_providers_intro\": \"Configurable dans .env via LLM_PROVIDER :\",\n \"provider_ollama\": \"Local, gratuit. Nécessite Ollama en cours d’exécution sur l’hôte. Modèle recommandé : gemma4:e4b. Peut être lent sans GPU.\",\n \"provider_openai\": \"API OpenAI (GPT-4o, etc.). Rapide et fiable. Nécessite OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Nécessite ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"API DeepSeek. Nécessite DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Puis-je inviter d’autres personnes ?\",\n \"a_invite\": \"Oui. Depuis Admin → Utilisateurs, l’administrateur peut créer des utilisateurs directement ou générer des liens d’invitation à usage unique qui expirent dans 48 heures. L’inscription publique est désactivée par défaut (ALLOW_REGISTRATION=false).\",\n \"q_password\": \"Comment modifier mon mot de passe ou ma langue maternelle ?\",\n \"a_password\": \"Allez dans Paramètres. Vous pouvez y mettre à jour votre nom d’affichage, votre langue maternelle et votre mot de passe.\",\n \"q_uiLanguage\": \"Comment changer la langue de la plateforme ?\",\n \"a_uiLanguage\": \"Allez dans Paramètres et trouvez le menu déroulant Langue de la plateforme dans la section Profil. Sélectionnez votre langue préférée et toute l'interface changera immédiatement.\",\n \"q_feedback\": \"Comment suggérer une nouvelle fonctionnalité ou signaler un bug ?\",\n \"a_feedback\": \"Utilisez la section Feedback dans la barre latérale. Vous pouvez proposer de nouvelles fonctionnalités ou signaler des bugs. Votez pour les idées des autres utilisateurs, laissez des commentaires et suivez l’état de chaque demande. Toutes les soumissions sont publiques et examinées par l’administrateur.\"\n },\n \"cookieBanner\": {\n \"message\": \"Nous utilisons des cookies strictement nécessaires pour maintenir votre connexion. Aucun cookie de suivi ou de publicité n'est utilisé.\",\n \"learnMore\": \"Politique de confidentialité\",\n \"accept\": \"Compris\"\n },\n \"error\": {\n \"label\": \"Erreur inattendue\",\n \"title\": \"Une erreur s'est produite\",\n \"body\": \"Une erreur inattendue s'est produite. Vous pouvez réessayer ou retourner au tableau de bord.\",\n \"retry\": \"Réessayer\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"digest\": \"Référence de l'erreur\"\n },\n \"notFound\": {\n \"title\": \"Page introuvable\",\n \"body\": \"La page que vous recherchez n'existe pas ou a été déplacée.\",\n \"dashboard\": \"Aller au tableau de bord\",\n \"home\": \"Accueil\"\n },\n \"errors\": {\n \"notFound\": \"Page introuvable\",\n \"serverError\": \"Une erreur s'est produite\",\n \"unauthorized\": \"Veuillez vous connecter\",\n \"backHome\": \"Retour à l'accueil\"\n },\n \"conversation\": {\n \"title\": \"Conversation\",\n \"subtitle\": \"Pratique orale\",\n \"start\": \"Démarrer la session\",\n \"stop\": \"Arrêter\",\n \"startNew\": \"Nouvelle session\",\n \"statusLoading\": \"Chargement du modèle vocal...\",\n \"statusReady\": \"Prêt\",\n \"statusWarming\": \"Chargement des modèles...\",\n \"statusConnecting\": \"Connexion...\",\n \"statusListening\": \"En écoute...\",\n \"statusDetecting\": \"Détection de la parole...\",\n \"statusSpeaking\": \"Parole en cours...\",\n \"statusError\": \"Erreur\",\n \"errorServicesDisabled\": \"Les services vocaux ne sont pas activés sur ce serveur.\",\n \"errorConnection\": \"Erreur de connexion. Veuillez réessayer.\",\n \"errorUnauthorized\": \"Session expirée. Veuillez actualiser.\",\n \"errorMic\": \"Accès au microphone refusé.\",\n \"errorVadInit\": \"Échec de l'initialisation de la reconnaissance vocale. Vérifiez que votre navigateur prend en charge WebAssembly.\",\n \"warningTimeout\": \"La session se termine dans {seconds}s\",\n \"sessionEnded\": \"Session terminée\",\n \"tapToStart\": \"Parlez quand vous êtes prêt\",\n \"you\": \"Vous\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Séances cette semaine\",\n \"quotaMinutes\": \"Minutes aujourd'hui\",\n \"quotaUnlimited\": \"Illimité\",\n \"quotaExceededSessions\": \"Vous avez utilisé toutes vos séances de la semaine.\",\n \"quotaExceededTime\": \"Vous avez utilisé tout votre temps de pratique quotidien.\",\n \"quotaExceededTokens\": \"Vous avez utilisé tous vos tokens IA mensuels.\",\n \"quotaTokens\": \"Tokens ce mois-ci\",\n \"memoryUpdated\": \"Mémoire mise à jour\",\n \"startersHint\": \"Ou commencez par un sujet\",\n \"starters\": [\n \"Art et créativité\",\n \"Livres et lecture\",\n \"Souvenirs d'enfance\",\n \"Ville vs. campagne\",\n \"Cuisine et recettes\",\n \"Rêves et ambitions\",\n \"Famille et relations\",\n \"Mode et style\",\n \"Films préférés\",\n \"Fêtes et traditions\",\n \"Cuisine du monde entier\",\n \"Santé et bien-être\",\n \"Loisirs et artisanat\",\n \"Apprentissage des langues\",\n \"Apprendre de nouvelles compétences\",\n \"Argent et budget\",\n \"Musique et concerts\",\n \"Animaux de compagnie\",\n \"Transports en commun\",\n \"Sciences et espace\",\n \"Habitudes d'achat\",\n \"Réseaux sociaux\",\n \"Sport et fitness\",\n \"Technologie et gadgets\",\n \"L'environnement\",\n \"Destinations de voyage\",\n \"Séries télévisées\",\n \"Plans du week-end\",\n \"Travail et objectifs de carrière\",\n \"Travail à domicile\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Enregistrer\",\n \"stop\": \"Arrêter\",\n \"processing\": \"Traitement\",\n \"error\": \"Erreur\",\n \"ariaRecord\": \"Commencer l'enregistrement\",\n \"ariaStop\": \"Arrêter l'enregistrement\"\n },\n \"audioPlayer\": {\n \"listen\": \"Écouter\",\n \"stop\": \"Arrêter\",\n \"ariaListen\": \"Écouter la prononciation\",\n \"ariaStop\": \"Arrêter l'audio\"\n },\n \"languages\": {\n \"en\": \"Anglais\",\n \"es\": \"Espagnol\",\n \"fr\": \"Français\",\n \"pt\": \"Portugais\",\n \"de\": \"Allemand\",\n \"it\": \"Italien\",\n \"pl\": \"Polonais\",\n \"nl\": \"Néerlandais\",\n \"ro\": \"Roumain\",\n \"ru\": \"Russe\",\n \"myLanguages\": \"Mes langues\",\n \"addLanguage\": \"Ajouter une langue\",\n \"selectLanguage\": \"Choisissez la langue que vous voulez apprendre\",\n \"activeLanguage\": \"Actif\",\n \"switchTo\": \"Basculer vers\",\n \"switching\": \"Basculement vers {language}...\",\n \"switched\": \"Basculé vers {language} ({level})\",\n \"removeLanguage\": \"Supprimer la langue\",\n \"removeConfirmTitle\": \"Supprimer {language} ?\",\n \"removeConfirmMessage\": \"Toute la progression, les leçons, les flashcards et les données associées à cette langue seront définitivement supprimées. Cette action est irréversible.\",\n \"removeConfirmButton\": \"Supprimer\",\n \"deleteError\": \"Impossible de supprimer {language}. Veuillez réessayer.\",\n \"noLanguages\": \"Aucune langue configurée.\",\n \"progressLabel\": \"Progression\",\n \"levelLabel\": \"Niveau\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Série\",\n \"lessonsLabel\": \"Leçons\",\n \"flashcardsLabel\": \"Flashcards\",\n \"viewDetails\": \"Voir les détails\",\n \"supportedLanguages\": \"Langues disponibles\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Anglais américain\",\n \"en-GB\": \"Anglais britannique\",\n \"es-ES\": \"Espagnol\",\n \"it-IT\": \"Italien\",\n \"pt-PT\": \"Portugais\",\n \"fr-FR\": \"Français\",\n \"de-DE\": \"Allemand\",\n \"ja-JP\": \"Japonais\",\n \"ko-KR\": \"Coréen\",\n \"zh-CN\": \"Chinois continental\",\n \"en\": \"anglais\",\n \"es\": \"espagnol\",\n \"it\": \"italien\",\n \"pt\": \"portugais\",\n \"fr\": \"français\",\n \"de\": \"allemand\",\n \"ja\": \"japonais\",\n \"ko\": \"coréen\",\n \"zh\": \"chinois\",\n \"es-ES-description\": \"Espagnol parlé en Espagne.\",\n \"it-IT-description\": \"Italien parlé en Italie.\",\n \"pt-PT-description\": \"Portugais parlé au Portugal.\",\n \"en-US-description\": \"Anglais parlé aux États-Unis.\",\n \"en-GB-description\": \"Anglais parlé au Royaume-Uni.\",\n \"fr-FR-description\": \"Français parlé en France.\",\n \"de-DE-description\": \"Allemand parlé en Allemagne.\",\n \"ja-JP-description\": \"Japonais parlé au Japon.\",\n \"ko-KR-description\": \"Coréen parlé en Corée du Sud.\",\n \"zh-CN-description\": \"Chinois mandarin de Chine continentale, avec caractères simplifiés.\"\n },\n \"onboarding\": {\n \"title\": \"Choisissez votre langue\",\n \"subtitle\": \"Quelle langue voulez-vous apprendre ?\",\n \"chooseVariant\": \"Sélectionner une variante\",\n \"continue\": \"Continuer\",\n \"saveFailed\": \"Échec de l'enregistrement des préférences\",\n \"goals\": {\n \"title\": \"Vos objectifs d'apprentissage\",\n \"subtitle\": \"Pour quoi voulez-vous utiliser l'anglais ? Sélectionnez tout ce qui s'applique.\",\n \"skip\": \"Passer\",\n \"travel\": \"Voyages et tourisme\",\n \"work\": \"Travail et carrière\",\n \"academic\": \"Études et université\",\n \"daily\": \"Conversation quotidienne\",\n \"media\": \"Films, musique et séries\",\n \"emigration\": \"Vivre à l'étranger\",\n \"exams\": \"Examens et certifications\",\n \"social\": \"Socialisation\"\n },\n \"trialHeadline\": \"Essai gratuit\",\n \"trialTitle\": \"{days} jours d'accès complet\",\n \"trialDesc\": \"Chat avec tuteur IA, conversations vocales, exercices de listening et reading. Sans engagement, annulez quand vous voulez.\",\n \"trialCtaMonthly\": \"Commencer à {price}€/mois\",\n \"trialCtaYearly\": \"Commencer à {price}€/an\",\n \"trialSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialNoCharge\": \"Carte requise. Aucun débit avant la fin de l'essai.\",\n \"trialError\": \"Impossible de lancer le paiement. Réessayez.\",\n \"newLanguageHeadline\": \"Quelle nouvelle langue voulez-vous apprendre ?\",\n \"newLanguageSubtitle\": \"Un nouveau plan d'étude sera créé pour cette langue.\"\n },\n \"tour\": {\n \"skip\": \"Passer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"done\": \"Commencer\",\n \"step1\": {\n \"label\": \"Bienvenue\",\n \"title\": \"Bienvenue sur FreeLingo\",\n \"desc\": \"FreeLingo est votre tuteur de langues alimenté par l'IA. Pratiquez à votre rythme, à tout moment, grâce à des conversations, des leçons et des cartes mémoire intelligentes.\"\n },\n \"step2\": {\n \"label\": \"Chat texte\",\n \"title\": \"Discutez avec votre tuteur\",\n \"desc\": \"Ayez des conversations écrites avec votre tuteur IA. Posez des questions, recevez des corrections et pratiquez la grammaire et le vocabulaire naturellement.\"\n },\n \"step3\": {\n \"label\": \"Voix\",\n \"title\": \"Parlez en temps réel\",\n \"desc\": \"Utilisez le mode conversation vocale pour pratiquer votre langue orale avec transcription en temps réel et retour immédiat sur votre prononciation.\"\n },\n \"step4\": {\n \"label\": \"Flashcards\",\n \"title\": \"N'oubliez aucun mot\",\n \"desc\": \"Les flashcards utilisent l'algorithme de répétition espacée SM-2 pour réviser les mots exactement quand vous êtes sur le point de les oublier.\"\n },\n \"step5\": {\n \"label\": \"Plan d'étude\",\n \"title\": \"Votre plan personnalisé\",\n \"desc\": \"En fonction de votre évaluation de niveau, FreeLingo crée un plan d'études structuré avec des leçons quotidiennes adaptées à vos objectifs.\"\n },\n \"step6\": {\n \"label\": \"Pratique\",\n \"title\": \"Écoute & Lecture\",\n \"desc\": \"Testez votre compréhension avec des exercices générés par l'IA. Écoutez un passage et répondez à 5 questions, ou lisez un texte à votre niveau CECR — gagnez des XP pour chaque bonne réponse.\"\n },\n \"step7\": {\n \"label\": \"Prêt\",\n \"title\": \"Vous êtes prêt !\",\n \"desc\": \"Commencez par la leçon du jour, ouvrez un chat ou pratiquez l'écoute et la lecture — FreeLingo s'adapte à votre façon d'apprendre.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium requis\",\n \"paywallTitle\": \"Débloquer FreeLingo Premium\",\n \"paywallDesc\": \"Commencez votre essai gratuit de {days} jours, sans frais aujourd'hui. Annulez à tout moment.\",\n \"paywallNoCharge\": \"Carte requise · aucun débit avant la fin de l'essai · annulez à tout moment\",\n \"paywallSkip\": \"Continuer avec les fonctions gratuites\",\n \"trialDays\": \"{days, plural, one {# jour d'essai} other {# jours d'essai}}\",\n \"planMonthly\": \"— Démarrer pour {price}€/mois →\",\n \"planYearly\": \"— Démarrer pour {price}€/an →\",\n \"checkoutError\": \"Impossible de lancer le paiement. Veuillez réessayer.\",\n \"pricingLabel\": \"Prix\",\n \"pricingTitle\": \"Tarif simple et transparent\",\n \"pricingDesc\": \"7 jours offerts avec ton abonnement · résilie quand tu veux\",\n \"planMonthlyName\": \"Mensuel\",\n \"planYearlyName\": \"Annuel\",\n \"bestValue\": \"Meilleure offre\",\n \"month\": \"mois\",\n \"year\": \"an\",\n \"ctaStart\": \"Démarrer l'essai gratuit de {days} jours\",\n \"planFeature\": {\n \"feature1\": \"Chat avec ton tuteur IA\",\n \"feature2\": \"Conversations vocales\",\n \"feature3\": \"Exercices de listening\",\n \"feature4\": \"Exercices de reading\",\n \"feature5\": \"2 mois offerts\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"7 jours gratuits\",\n \"ctaRegister\": \"Commencer\",\n \"everythingFree\": \"Tout ce que comprend le plan gratuit, plus :\",\n \"freeFeature\": {\n \"f1\": \"Test de niveau & évaluation\",\n \"f2\": \"Leçons & plan d'étude\",\n \"f3\": \"Grammaire & vocabulaire\",\n \"f4\": \"Tableau de bord & progression\",\n \"f5\": \"Cartes mémoire & répétition espacée\"\n },\n \"successLabel\": \"Paiement confirmé\",\n \"successTitle\": \"Bienvenue dans FreeLingo Premium !\",\n \"successDesc\": \"Votre abonnement est actif. Profitez d'un accès illimité à toutes les fonctionnalités.\",\n \"successRedirect\": \"Redirection vers le tableau de bord dans {seconds}s...\",\n \"successCta\": \"Aller au tableau de bord\",\n \"canceledLabel\": \"Paiement annulé\",\n \"canceledTitle\": \"Aucun frais n'a été prélevé\",\n \"canceledDesc\": \"Vous pouvez vous abonner à tout moment. Vos progrès et paramètres sont intacts.\",\n \"canceledCtaDashboard\": \"Aller au tableau de bord\",\n \"canceledCtaSettings\": \"Aller aux paramètres\",\n \"section\": \"Abonnement\",\n \"status\": \"Statut\",\n \"statusActive\": \"Actif\",\n \"statusCanceled\": \"Annulé\",\n \"statusTrialing\": \"Essai\",\n \"statusPastDue\": \"Paiement en retard\",\n \"statusNone\": \"Aucun abonnement\",\n \"nextBilling\": \"Prochaine facturation\",\n \"accessUntil\": \"Accès jusqu'au\",\n \"manage\": \"Gérer l'abonnement\",\n \"subscribe\": \"S'abonner\",\n \"portalError\": \"Impossible d'ouvrir le portail de facturation. Veuillez réessayer.\",\n \"openSourceTitle\": \"Open source\",\n \"openSourceDesc\": \"Hébergez-le gratuitement sur votre serveur\",\n \"openSourceCta\": \"Voir sur GitHub\",\n \"planFreeBadge\": \"Gratuit pour toujours\",\n \"priceAmount\": \"{amount}€\",\n \"pricePerPeriod\": \"€/{period}\",\n \"priceOriginal\": \"{price}€ / {period}\",\n \"planFreePriceLabel\": \"Gratuit\",\n \"planFreeDesc\": \"Tout l'essentiel pour commencer à apprendre\",\n \"planFreeCta\": \"Commencer\"\n },\n \"whatsNew\": {\n \"title\": \"Nouveautés\",\n \"version\": \"v1.8.14\",\n \"cta\": \"Compris\",\n \"entry1\": {\n \"label\": \"Tableau de bord plus clair\",\n \"desc\": \"Votre tableau de bord se concentre maintenant sur la prochaine action, avec des leçons du jour, une progression du plan, une progression du vocabulaire et des performances récentes plus faciles à lire.\"\n },\n \"entry2\": {\n \"label\": \"Plus de langues à apprendre\",\n \"desc\": \"Allemand, chinois continental, coréen, espagnol, français, italien, japonais et portugais sont désormais disponibles, avec des parcours complets du débutant à l’avancé, grammaire, vocabulaire, phrases, Reading, Listening et plus. Ajoutez-les depuis Paramètres → Mes langues.\"\n },\n \"entry3\": {\n \"label\": \"Ajoutez un avis depuis votre profil\",\n \"desc\": \"Vous pouvez désormais partager votre avis sur FreeLingo directement depuis Paramètres → Profil. Votre avis aide d'autres apprenants à découvrir la plateforme.\"\n },\n \"entry4\": {\n \"label\": \"Corrections de bugs\",\n \"desc\": \"Diverses corrections de bugs mineurs et améliorations de stabilité sur toute la plateforme.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"votre@email.com\",\n \"labelSubject\": \"Objet\",\n \"placeholderSubject\": \"Brève description de votre question\",\n \"labelDescription\": \"Message\",\n \"placeholderDescription\": \"Décrivez votre question ou commentaire...\",\n \"send\": \"Envoyer\",\n \"sending\": \"Envoi en cours...\",\n \"sent\": \"Message envoyé\",\n \"errorGeneric\": \"Échec de l'envoi. Veuillez réessayer.\"\n },\n \"listening\": {\n \"title\": \"Compréhension orale\",\n \"topic\": \"Thème\",\n \"listenLabel\": \"Écouter\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"audioError\": \"Impossible de charger l'audio\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"transcript\": \"Transcription\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de listening\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\"\n },\n \"reading\": {\n \"title\": \"Lecture\",\n \"topic\": \"Thème\",\n \"textLabel\": \"Texte\",\n \"questionsLabel\": \"Questions\",\n \"submit\": \"Soumettre les réponses\",\n \"generating\": \"Génération de l'exercice...\",\n \"generatingDesc\": \"L'IA crée un nouvel exercice. Cela prend environ 30 secondes.\",\n \"generatingLong\": \"Cela prend plus de temps que prévu...\",\n \"noExercises\": \"Aucun exercice disponible pour votre niveau.\",\n \"generate\": \"Générer un exercice\",\n \"alreadyAttempted\": \"Vous avez déjà complété cet exercice.\",\n \"errorLoading\": \"Impossible de charger l'exercice. Veuillez réessayer.\",\n \"errorSubmit\": \"Impossible de soumettre les réponses. Veuillez réessayer.\",\n \"resultsLabel\": \"Résultats\",\n \"review\": \"Révision des réponses\",\n \"nextExercise\": \"Exercice suivant\",\n \"viewHistory\": \"Historique\",\n \"history\": \"Historique\",\n \"historyTitle\": \"Historique de lecture\",\n \"historyEmpty\": \"Aucun exercice complété pour l'instant.\",\n \"practiceMore\": \"Pratiquer\",\n \"moreInHistory\": \"+{count} de plus\",\n \"practiceAgain\": \"Pratiquer à nouveau\",\n \"replayNoXp\": \"Répétition (sans XP)\",\n \"selectWordHint\": \"Sélectionne un mot pour l’enregistrer dans ton vocabulaire\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Suggestions et rapports de bugs\",\n \"tabFeatures\": \"Suggestions\",\n \"tabBugs\": \"Bugs\",\n \"newFeature\": \"+ Nouvelle suggestion\",\n \"newBug\": \"+ Signaler un bug\",\n \"sortBy\": \"Trier par\",\n \"sortVotes\": \"Plus votés\",\n \"sortDate\": \"Plus récents\",\n \"filterStatus\": \"Statut\",\n \"filterAll\": \"Tous\",\n \"noEntries\": \"Rien ici pour l'instant. Soyez le premier à soumettre !\",\n \"votes\": \"{count} votes\",\n \"vote\": \"1 vote\",\n \"comments\": \"{count} commentaires\",\n \"comment\": \"1 commentaire\",\n \"by\": \"par\",\n \"statusPending\": \"En attente\",\n \"statusPlanned\": \"Planifié\",\n \"statusInProgress\": \"En cours\",\n \"statusDone\": \"Terminé\",\n \"statusDeclined\": \"Refusé\",\n \"modalCreateTitleFeature\": \"Nouvelle suggestion\",\n \"modalCreateTitleBug\": \"Signaler un bug\",\n \"labelTitle\": \"Titre\",\n \"placeholderTitleFeature\": \"Décrivez votre suggestion en une phrase\",\n \"placeholderTitleBug\": \"Description courte du bug\",\n \"labelDescription\": \"Détails\",\n \"placeholderDescriptionFeature\": \"Expliquez la fonctionnalité et pourquoi elle serait utile\",\n \"placeholderDescriptionBug\": \"Étapes pour reproduire, comportement attendu, ce qui s'est passé\",\n \"submit\": \"Envoyer\",\n \"submitting\": \"Envoi...\",\n \"cancel\": \"Annuler\",\n \"deleteEntry\": \"Supprimer\",\n \"deleteEntryConfirmTitle\": \"Supprimer l'entrée\",\n \"deleteEntryConfirmMessage\": \"Supprimer cette entrée ? Cette action est irréversible.\",\n \"deleteEntryConfirm\": \"Supprimer\",\n \"addComment\": \"Ajouter un commentaire\",\n \"commentPlaceholder\": \"Écrivez un commentaire...\",\n \"postComment\": \"Publier\",\n \"postingComment\": \"Publication...\",\n \"deleteComment\": \"Supprimer\",\n \"deleteCommentConfirmTitle\": \"Supprimer le commentaire\",\n \"deleteCommentConfirmMessage\": \"Supprimer ce commentaire ?\",\n \"deleteCommentConfirm\": \"Supprimer\",\n \"loading\": \"Chargement...\",\n \"backToList\": \"← Retour\",\n \"errorLoad\": \"Échec du chargement. Réessayez.\",\n \"errorSubmit\": \"Échec de l'envoi. Réessayez.\",\n \"prevPage\": \"← Préc.\",\n \"nextPage\": \"Suiv. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Impossible de vérifier le statut de votre avis. Réessayez plus tard.\",\n \"ratingRequiredError\": \"Choisissez une note avant d'envoyer.\",\n \"saveError\": \"Impossible d'enregistrer votre avis. Réessayez.\",\n \"eyebrow\": \"Avis FreeLingo\",\n \"title\": \"Comment s'est passée votre expérience ?\",\n \"closeLabel\": \"Fermer la demande d'avis\",\n \"checking\": \"Vérification du statut de l'avis...\",\n \"ratingLabel\": \"Note requise\",\n \"ratingGroupLabel\": \"Note\",\n \"star\": \"étoile\",\n \"stars\": \"étoiles\",\n \"commentLabel\": \"Commentaire facultatif\",\n \"commentPlaceholder\": \"Dites-nous ce qui vous a aidé à apprendre.\",\n \"cancel\": \"Annuler\",\n \"submit\": \"Envoyer\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Histoires d'apprenants\",\n \"title\": \"Apprendre se voit encore mieux quand vous le racontez\",\n \"subtitle\": \"Avis d'étudiants qui s'entraînent déjà avec Lingu sur FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# avis au total} other {# avis au total}}\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"starsLabel\": \"{rating} sur 5 étoiles\",\n \"ratingOnly\": \"Note FreeLingo vérifiée.\"\n },\n \"adminReviews\": {\n \"title\": \"Avis\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtré\",\n \"approvedOnPage\": \"Approuvés sur la page\",\n \"pendingOnPage\": \"En attente sur la page\",\n \"filters\": \"Filtres\",\n \"approvalFilter\": \"Filtre d'approbation\",\n \"allReviews\": \"Tous les avis\",\n \"pending\": \"En attente\",\n \"approved\": \"Approuvé\",\n \"ratingFilter\": \"Filtre de note\",\n \"allRatings\": \"Toutes les notes\",\n \"starsOption\": \"{rating} étoiles\",\n \"clear\": \"Effacer\",\n \"loadError\": \"Impossible de charger les avis.\",\n \"updateError\": \"Impossible de mettre à jour l'avis.\",\n \"deleteError\": \"Impossible de supprimer l'avis.\",\n \"loading\": \"Chargement des avis...\",\n \"queue\": \"File des avis\",\n \"total\": \"{total} au total\",\n \"empty\": \"Aucun avis trouvé.\",\n \"starsLabel\": \"{rating} étoiles\",\n \"learningLanguage\": \"Apprentissage : {language}\",\n \"ratingOnly\": \"Avis avec note uniquement.\",\n \"unapprove\": \"Désapprouver\",\n \"approve\": \"Approuver\",\n \"delete\": \"Supprimer\",\n \"prev\": \"Précédent\",\n \"next\": \"Suivant\",\n \"deleteTitle\": \"Supprimer l'avis\",\n \"deleteMessage\": \"Supprimer cet avis ? Cette action est irréversible.\"\n },\n \"maintenance\": {\n \"label\": \"Maintenance\",\n \"title\": \"En maintenance\",\n \"description\": \"Cette section est temporairement indisponible pour cause de maintenance. Veuillez réessayer plus tard.\"\n }\n}\n"}}, "messages/ro.json": {"a64e246c26b5e1ca15c9d91f565243a0e12e2cb7": {"t": 1786068227.7397466, "n": 81663, "h": "e157bb51d27365a4", "c": "{\n \"landing\": {\n \"hero\": \"Învață limbi străine cu un partener de conversație real prin voce\",\n \"heroSub\": \"Vorbește. Ascultă. Îmbunătățește-te.\",\n \"signIn\": \"Conectare\",\n \"dashboard\": \"Continuă\",\n \"feature1Title\": \"Plan de studiu\",\n \"feature1Desc\": \"Evaluare a nivelului + plan săptămânal de la A1 la C2. Lecțiile se deblochează în ordine, în ritmul tău.\",\n \"feature2Title\": \"Tutore AI\",\n \"feature2Desc\": \"Exersează cu lecții, exerciții și carduri flash ghidat de tutore. Feedback la fiecare pas.\",\n \"feature3Title\": \"Conversație vocală\",\n \"feature3Desc\": \"Vorbește cu tutorele în timp real. Controlat prin voce, răspuns imediat, fără rânduri.\",\n \"feature4Title\": \"Listening & Reading\",\n \"feature4Desc\": \"Exerciții generate de IA la nivelul tău CEFR. Ascultă un pasaj și răspunde la 5 întrebări de înțelegere, apoi deblochează transcrierea — sau citește un text și răspunde direct. Exerciții noi generate la cerere.\",\n \"feature5Title\": \"Flashcard-uri\",\n \"feature5Desc\": \"Revizuirea vocabularului prin repetiție spațiată. Algoritmul SM-2 programează fiecare card la momentul optim pentru a maximiza retenția pe termen lung.\",\n \"feature6Title\": \"Progres și serii\",\n \"feature6Desc\": \"XP, serii zilnice, scoruri de competențe și aptitudini pe unitate. Urmărește-ți evoluția săptămână după săptămână și testează-ți nivelul la sfârșitul fiecărei etape CEFR.\",\n \"footer\": \"Sursă deschisă · Găzduire proprie gratuită sau abonament la serviciul găzduit\",\n \"navFeatures\": \"Funcționalități\",\n \"navReviews\": \"Recenzii\",\n \"navPricing\": \"Prețuri\",\n \"navFAQ\": \"FAQ\",\n \"howItWorks\": \"Cum funcționează\",\n \"faqTitle\": \"Întrebări frecvente\",\n \"terms\": \"Termeni și condiții\",\n \"privacy\": \"Confidențialitate\",\n \"contact\": \"Contact\",\n \"aboutMe\": \"Despre mine\",\n \"github\": \"GitHub\",\n \"footerProduct\": \"Produs\",\n \"footerLegal\": \"Juridic\",\n \"languageGreetings\": {\n \"en-US\": \"Hello!\",\n \"en-GB\": \"Hello!\",\n \"de-DE\": \"Hallo!\",\n \"es-ES\": \"¡Hola!\",\n \"fr-FR\": \"Bonjour !\",\n \"it-IT\": \"Ciao!\",\n \"pt-PT\": \"Olá!\",\n \"ja-JP\": \"こんにちは!\",\n \"ko-KR\": \"안녕하세요!\",\n \"zh-CN\": \"你好!\"\n }\n },\n \"common\": {\n \"loading\": \"Se încarcă...\",\n \"error\": \"Eroare\",\n \"save\": \"Salvează modificările\",\n \"saving\": \"Se salvează...\",\n \"cancel\": \"Anulează\",\n \"back\": \"Înapoi\",\n \"done\": \"Gata\",\n \"next\": \"Următor\",\n \"submit\": \"Trimite\",\n \"start\": \"Începe\",\n \"retry\": \"Încearcă din nou\",\n \"or\": \"sau\",\n \"appName\": \"FreeLingo\",\n \"days\": \"zile\",\n \"logout\": \"Deconectare\",\n \"logoutConfirmTitle\": \"Deconectare\",\n \"logoutConfirmMessage\": \"Ești sigur că vrei să te deconectezi?\",\n \"initializing\": \"Se inițializează...\",\n \"clearFilters\": \"Șterge filtrele\",\n \"all\": \"Toate\",\n \"score\": \"Scor\",\n \"complete\": \"Finalizat\",\n \"checking\": \"Se verifică...\",\n \"backToDashboard\": \"Înapoi la panou\",\n \"tagline\": \"Educație lingvistică AI\",\n \"close\": \"Închide\",\n \"verifyEmailBanner\": \"Vă rugăm să vă verificați adresa de e-mail pentru a finaliza configurarea contului.\",\n \"verifyEmailSent\": \"E-mail trimis. Verificați inbox-ul.\",\n \"resendVerification\": \"Retrimite e-mail de verificare\",\n \"saveWord\": \"Salvează\",\n \"wordSaved\": \"Salvat\",\n \"wordSaveError\": \"A apărut o problemă\",\n \"selectWordHint\": \"Selectează un cuvânt pentru a-l salva în vocabularul tău\",\n \"noActivePlan\": \"Nu a fost găsit niciun plan de studiu activ\",\n \"memorySavedToast\": \"Lingu a salvat o amintire nouă. O poți verifica în Setări.\",\n \"removeLanguageConfirmTitle\": \"Elimină limba\",\n \"removeLanguageConfirmMessage\": \"Toate datele specifice acestei limbi (plan de studiu, progres, flashcarduri și conversații) vor fi șterse permanent. Amintirile contului vor fi păstrate. Această acțiune nu poate fi anulată.\",\n \"removeLanguageConfirmLabel\": \"Elimină\",\n \"nativeHelpTitle\": \"Ajutor în {language}\",\n \"nativeHelpLoading\": \"Se pregătește ajutorul în {language}...\",\n \"nativeHelpShow\": \"Afișează ajutorul în {language}\",\n \"nativeHelpKeyPoints\": \"Puncte-cheie\",\n \"nativeHelpCommonTraps\": \"Capcane frecvente\",\n \"nativeHelpMiniGlossary\": \"Mini glosar\",\n \"nativeHelpUsageTips\": \"Sfaturi de utilizare\",\n \"nativeHelpRegisterNotes\": \"Registru\",\n \"nativeHelpPhraseNotes\": \"Note despre fraze\",\n \"nativeHelpStudyTips\": \"Sfaturi de studiu\",\n \"nativeHelpWordNotes\": \"Note despre cuvinte\",\n \"nativeHelpPractice\": \"Practică\"\n },\n \"nav\": {\n \"home\": \"Acasă\",\n \"myPlan\": \"Planul meu\",\n \"progress\": \"Progres\",\n \"flashcards\": \"Carduri flash\",\n \"tutor\": \"Chat cu tutore\",\n \"assessment\": \"Evaluare\",\n \"resources\": \"Resurse\",\n \"grammar\": \"Gramatică\",\n \"vocabulary\": \"Vocabular\",\n \"phrasebook\": \"Ghid de fraze\",\n \"settings\": \"Setări\",\n \"faq\": \"Întrebări frecvente\",\n \"admin\": \"Admin\",\n \"conversation\": \"Conversație\",\n \"listening\": \"Listening\",\n \"reading\": \"Reading\",\n \"contact\": \"Contact\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzii\",\n \"switchLanguage\": \"Schimbă limba\"\n },\n \"auth\": {\n \"login\": {\n \"title\": \"Conectare\",\n \"subtitle\": \"Bine ai revenit\",\n \"email\": \"E-mail\",\n \"password\": \"Parolă\",\n \"submit\": \"Conectare\",\n \"noAccount\": \"Nu ai un cont?\",\n \"register\": \"Înregistrare\",\n \"error\": \"E-mail sau parolă invalide\",\n \"emailRequired\": \"Introdu adresa de e-mail\",\n \"passwordRequired\": \"Introdu parola\",\n \"loginFailed\": \"Conectare eșuată\",\n \"signingIn\": \"Se conectează...\",\n \"showPassword\": \"Afișează parola\",\n \"hidePassword\": \"Ascunde parola\",\n \"accountCreated\": \"Cont creat. Te poți conecta acum\",\n \"invalidEmail\": \"Introdu o adresă de e-mail validă\",\n \"forgotPassword\": \"Ați uitat parola?\"\n },\n \"register\": {\n \"title\": \"Creează cont\",\n \"subtitle\": \"Începe să înveți\",\n \"username\": \"Nume de utilizator\",\n \"email\": \"E-mail\",\n \"password\": \"Parolă\",\n \"displayName\": \"Nume afișat\",\n \"nativeLanguage\": \"Limbă maternă\",\n \"inviteToken\": \"Cod de invitație\",\n \"inviteTokenPlaceholder\": \"Introdu codul de invitație\",\n \"submit\": \"Creează cont\",\n \"hasAccount\": \"Ai deja un cont?\",\n \"login\": \"Conectare\",\n \"registrationClosed\": \"Înregistrarea este închisă. Ai nevoie de un cod de invitație.\",\n \"error\": \"Înregistrare eșuată\",\n \"passwordMismatch\": \"Parolele nu coincid\",\n \"confirmPassword\": \"Confirmă parola\",\n \"showPassword\": \"Afișează parola\",\n \"hidePassword\": \"Ascunde parola\",\n \"displayNamePlaceholder\": \"Același ca numele de utilizator dacă e gol\",\n \"inviteActive\": \"Invitație activă\",\n \"creatingAccount\": \"Se creează...\",\n \"invalidEmail\": \"Introdu o adresă de e-mail validă\",\n \"usernameTaken\": \"Numele de utilizator este deja folosit\",\n \"emailTaken\": \"Adresa de e-mail este deja înregistrată\",\n \"invalidInvite\": \"Cod de invitație invalid sau expirat\",\n \"termsAccept\": \"Am citit și accept\",\n \"termsLink\": \"Termenii și condițiile\",\n \"andWord\": \"și\",\n \"privacyLink\": \"Politica de confidențialitate\",\n \"termsRequired\": \"Trebuie să accepți termenii pentru a continua\",\n \"invalidPassword\": \"Parola trebuie să aibă între 10 şi 25 de caractere şi să includă cel puțin o majusculă, o cifră şi un simbol\",\n \"invalidUsernameChars\": \"Numele de utilizator poate conține doar litere, cifre, cratime, underscore și puncte\"\n },\n \"verifyEmail\": {\n \"title\": \"Verificare e-mail\",\n \"loading\": \"Se verifică...\",\n \"success\": \"E-mailul a fost verificat. Vă puteți autentifica acum.\",\n \"error\": \"Link de verificare invalid sau expirat.\",\n \"goToLogin\": \"Mergi la autentificare\"\n },\n \"forgotPassword\": {\n \"title\": \"Parolă uitată\",\n \"description\": \"Introduceți adresa de e-mail a contului și vă vom trimite un link de resetare.\",\n \"emailPlaceholder\": \"email@tau.com\",\n \"submit\": \"Trimite link\",\n \"sending\": \"Se trimite...\",\n \"sent\": \"Dacă acel e-mail este înregistrat, a fost trimis un link.\",\n \"backToLogin\": \"Înapoi la autentificare\",\n \"error\": \"Ceva a mers greșit. Vă rugăm să încercați din nou.\"\n },\n \"resetPassword\": {\n \"title\": \"Resetare parolă\",\n \"newPassword\": \"Parolă nouă\",\n \"confirmPassword\": \"Confirmă parola\",\n \"submit\": \"Salvează parola\",\n \"saving\": \"Se salvează...\",\n \"success\": \"Parolă actualizată. Redirecționare...\",\n \"mismatch\": \"Parolele nu se potrivesc\",\n \"tooShort\": \"Parola trebuie să aibă cel puțin 8 caractere\",\n \"missingToken\": \"Link invalid. Solicitați o nouă resetare.\",\n \"error\": \"Link invalid sau expirat\",\n \"backToLogin\": \"Înapoi la autentificare\"\n }\n },\n \"settings\": {\n \"title\": \"Setări\",\n \"sectionAccount\": \"Cont\",\n \"sectionProfile\": \"Profil\",\n \"avatarChange\": \"Schimbă fotografia\",\n \"avatarRemove\": \"Elimină\",\n \"avatarUploading\": \"Se încarcă...\",\n \"avatarTypeError\": \"Sunt permise doar imagini JPEG și PNG\",\n \"avatarSizeError\": \"Imaginea este prea mare (max. 2 MB)\",\n \"displayName\": \"Nume afișat\",\n \"email\": \"E-mail\",\n \"nativeLanguage\": \"Limbă maternă\",\n \"uiLocale\": \"Limba interfeței\",\n \"uiLocaleHint\": \"Schimbă limba meniurilor și butoanelor. Necesită reîncărcarea paginii.\",\n \"newPassword\": \"Parolă nouă\",\n \"newPasswordPlaceholder\": \"Lasă gol pentru a păstra\",\n \"confirmPassword\": \"Confirmă parola\",\n \"confirmPasswordPlaceholder\": \"Repetă noua parolă\",\n \"bio\": \"Despre tine (context IA)\",\n \"bioPlaceholder\": \"ex: Sunt programator/oare și călătoresc frecvent în interes de serviciu...\",\n \"bioHint\": \"Tutorele IA va folosi aceasta pentru a personaliza conversațiile.\",\n \"saveChanges\": \"Salvează modificările\",\n \"saving\": \"Se salvează...\",\n \"saved\": \"Profil actualizat.\",\n \"passwordMismatch\": \"Parolele nu coincid\",\n \"saveFailed\": \"Salvare eșuată\",\n \"logout\": \"Deconectare\",\n \"sectionAppearance\": \"Aspect\",\n \"theme\": \"Temă\",\n \"darkActive\": \"Mod întunecat activ\",\n \"lightActive\": \"Mod deschis activ\",\n \"systemActive\": \"Automat (sistem)\",\n \"themeSystem\": \"Auto\",\n \"themeDark\": \"Întunecat\",\n \"themeLight\": \"Deschis\",\n \"switchToLight\": \"Treci la deschis\",\n \"switchToDark\": \"Treci la întunecat\",\n \"sectionConversation\": \"Conversație\",\n \"conversationMaxDuration\": \"Durată maximă a sesiunii\",\n \"conversationInactivityTimeout\": \"Limită de inactivitate\",\n \"min15\": \"15 minute\",\n \"min30\": \"30 minute\",\n \"min1\": \"1 minut\",\n \"min3\": \"3 minute\",\n \"min5\": \"5 minute\",\n \"saveConversation\": \"Salvează\",\n \"conversationSaved\": \"Setările conversației au fost salvate.\",\n \"sectionLegal\": \"Legal\",\n \"termsOfService\": \"Termeni și condiții\",\n \"privacyPolicy\": \"Politică de confidențialitate\",\n \"contactLink\": \"Contact\",\n \"deleteAccount\": \"Șterge contul\",\n \"deleteAccountTitle\": \"Șterge contul\",\n \"deleteAccountMessage\": \"Acest lucru va șterge permanent contul tău și toate datele asociate. Această acțiune nu poate fi anulată.\",\n \"deleteAccountConfirm\": \"Șterge contul\",\n \"sectionUsageLimits\": \"Limite de utilizare\",\n \"sectionVoice\": \"Voce\",\n \"voiceHint\": \"Alege vocea preferată din meniul derulant, apoi apasă redare pentru a o asculta.\",\n \"voicePlay\": \"Redă\",\n \"voiceStop\": \"Opreşte\",\n \"quotaSessions\": \"Sesiuni / săptămână\",\n \"quotaMinutesDay\": \"Minute / zi\",\n \"quotaMinutesWeek\": \"Minute / săptămână\",\n \"quotaTokens\": \"Token-uri / lună\",\n \"quotaUnlimited\": \"Nelimitat\",\n \"quotaLoading\": \"Se încarcă...\",\n \"quotaHint\": \"Utilizarea se resetează săptămânal (sesiuni și minute) și lunar (token-uri).\",\n \"sectionMemory\": \"Memorie\",\n \"memoryEmpty\": \"Nu există amintiri salvate încă. Tutorul AI va reține detalii importante despre tine în timpul conversațiilor și le va salva aici.\",\n \"memoryClearAll\": \"Șterge toate amintirile\",\n \"memoryClearAllTitle\": \"Șterge toate amintirile\",\n \"memoryClearAllMessage\": \"Aceasta va șterge permanent toate amintirile salvate. Această acțiune nu poate fi anulată.\",\n \"memoryClearAllConfirm\": \"Șterge tot\",\n \"memoryManage\": \"Gestionează amintirile\",\n \"memoryBreadcrumb\": \"Setări memorie\",\n \"memoryDescription\": \"Amintirile sunt partajate între toate limbile studiate. Lingu poate salva detalii utile în conversații, iar aici le poți adăuga sau elimina.\",\n \"memoryInputLabel\": \"Adaugă o amintire\",\n \"memoryInputPlaceholder\": \"De exemplu: Prefer explicațiile concise.\",\n \"memoryInputHint\": \"Maximum {max} caractere\",\n \"memoryAdd\": \"Adaugă\",\n \"memoryAdding\": \"Se adaugă...\",\n \"memoryAddSuccess\": \"Amintire adăugată.\",\n \"memoryAddError\": \"Amintirea nu a putut fi adăugată. Încearcă din nou.\",\n \"memoryDuplicateError\": \"Această amintire există deja.\",\n \"memoryLoadError\": \"Amintirile nu au putut fi încărcate.\",\n \"memoryDeleteLabel\": \"Șterge amintirea: {content}\",\n \"memoryDeleteSuccess\": \"Amintire ștearsă.\",\n \"memoryDeleteError\": \"Amintirea nu a putut fi ștearsă.\",\n \"memoryClearing\": \"Se șterge...\",\n \"memoryClearSuccess\": \"Toate amintirile au fost șterse.\",\n \"memoryClearError\": \"Amintirile nu au putut fi șterse.\",\n \"memorySourceChat\": \"Chat\",\n \"memorySourceVoice\": \"Voce\",\n \"memorySourceManual\": \"Manual\",\n \"memorySourceUnknown\": \"Amintire\",\n \"sectionLanguages\": \"Limbi\",\n \"languagesManage\": \"Limbile mele\",\n \"cardProfileAccess\": \"Profil și acces\",\n \"cardSessionSecurity\": \"Sesiune și securitate\",\n \"cardTheme\": \"Temă\",\n \"cardConversationTiming\": \"Durata conversației\",\n \"cardTutorVoice\": \"Vocea tutorelui\",\n \"cardCurrentUsage\": \"Utilizare curentă\",\n \"cardProductReview\": \"Recenzie produs\",\n \"cardLegalDocuments\": \"Documente legale\",\n \"sectionReview\": \"Recenzie\",\n \"reviewDescription\": \"Împărtășește experiența ta cu FreeLingo. Dacă editezi o recenzie deja aprobată, aceasta va reveni la verificare înainte de a apărea public.\",\n \"reviewPending\": \"În așteptarea aprobării\",\n \"reviewUpdate\": \"Actualizează\",\n \"reviewSaved\": \"Recenzie salvată.\",\n \"reviewDelete\": \"Șterge recenzia\",\n \"reviewDeleteTitle\": \"Șterge recenzia\",\n \"reviewDeleteMessage\": \"Vrei să ștergi recenzia ta? Această acțiune nu poate fi anulată.\",\n \"reviewDeleteConfirm\": \"Șterge\",\n \"reviewDeleted\": \"Recenzie ștearsă.\",\n \"reviewDeleteError\": \"Nu am putut șterge recenzia. Încearcă din nou.\"\n },\n \"legal\": {\n \"terms\": {\n \"pageTitle\": \"Termeni și condiții\",\n \"updated\": \"Ultima actualizare: iunie 2026\",\n \"s1Title\": \"1. Despre FreeLingo\",\n \"s1Body\": \"FreeLingo este o platformă de învățare a limbilor bazată pe AI, disponibilă în două moduri: (1) auto-găzduită, pe care o poți rula pe propria infrastructură fără costuri, și (2) ca serviciu găzduit gestionat de echipa FreeLingo, cu un plan gratuit și abonamente plătite.\",\n \"s2Title\": \"2. Utilizare permisă\",\n \"s2Intro\": \"Poți folosi FreeLingo exclusiv în scopuri personale de învățare a limbilor. Ești de acord să nu:\",\n \"s2i1\": \"Încerci să obții acces neautorizat la orice parte a sistemului.\",\n \"s2i2\": \"Încarci conținut malițios sau să perturbezi serviciul.\",\n \"s2i3\": \"Partajezi datele de autentificare cu terți.\",\n \"s2i4\": \"Folosești scripturi automate sau boți pentru a abuza de funcțiile tutorului AI.\",\n \"s3Title\": \"3. Conturi de utilizator\",\n \"s3Body\": \"Trebuie să ai cel puțin 16 ani pentru a crea un cont și a folosi FreeLingo. Prin înregistrare, confirmi că îndeplinești această cerință de vârstă.\",\n \"s4Title\": \"4. Conținut și interacțiuni AI\",\n \"s4Body\": \"Conversațiile cu tutorele AI sunt stocate în baza de date pentru continuitatea învățării. AI poate oferi răspunsuri incorecte — folosește întotdeauna propriul tău raționament. Conținutul generat de tutorele AI (exerciții, corecturi, explicații și alte materiale) îți aparține pentru uz personal. FreeLingo nu revendică drepturi de proprietate asupra conversațiilor tale sau asupra conținutului generat din acestea.\",\n \"s5Title\": \"5. Moduri de serviciu\",\n \"s5Body\": \"Implementările auto-găzduite sunt gratuite. Serviciul găzduit de echipa FreeLingo oferă un plan gratuit cu limite de utilizare și abonamente plătite pentru acces nelimitat, disponibile lunar sau anual. Planul gratuit include o perioadă de probă de 7 zile cu acces complet (fără metodă de plată necesară) și ulterior cote zilnice limitate pentru lecții și chat AI, plus cote săptămânale pentru exerciții de ascultare, citire și conversații vocale. Abonamentele plătite elimină toate limitele de utilizare ale acestor funcții. În serviciul găzduit, datele tale sunt stocate pe servere operate de echipa FreeLingo. Limitele actuale de utilizare pentru contul tău sunt disponibile în tabloul de bord.\",\n \"s6Title\": \"6. Abonament și facturare\",\n \"s6Body\": \"Planul gratuit include acces limitat la funcțiile AI cu o perioadă de probă de 7 zile cu acces complet pentru utilizatorii noi (fără metodă de plată necesară). Abonamentele plătite sunt disponibile cu ciclu de facturare lunar sau anual şi se reînoiesc automat dacă nu sunt anulate înainte de data de reînoiire. Noii abonaţi la un plan plătit beneficiază de o perioadă de încercare gratuită (detalii de plată necesare; nu se efectuează nicio taxă până la sfârşitul perioadei de încercare). Poţi anula oricand din setarile contului, cu efect la sfârşitul perioadei de facturare curente. Preţurile actuale ale abonamentelor sunt afisate la checkout.\",\n \"s7Title\": \"7. Disponibilitate\",\n \"s7Body\": \"Acest serviciu este oferit fără garanții de uptime. Operatorul poate suspenda sau întrerupe serviciul pentru întreținere sau actualizări.\",\n \"s8Title\": \"8. Limitarea răspunderii\",\n \"s8Body\": \"FreeLingo și contribuitorii săi nu sunt răspunzători pentru daune directe, indirecte, incidentale sau consequente rezultate din utilizarea sau incapacitatea de a utiliza acest serviciu. Sunteți de acord să despăgubiți și să exonerați de răspundere FreeLingo și colaboratorii săi față de orice reclamații, daune sau cheltuieli ale terților care decurg din utilizarea de către dvs. a serviciului cu încălcarea acestor termeni.\",\n \"s9Title\": \"9. Legea aplicabilă\",\n \"s9Body\": \"Acești termeni sunt guvernați de legea Spaniei. Orice litigiu este supus jurisdicției exclusive a instanțelor din Spania.\",\n \"s10Title\": \"10. Modificări ale acestor termeni\",\n \"s10Body\": \"Acești termeni pot fi actualizați în orice moment. Vom notifica utilizatorii cu privire la modificările materiale prin interfața serviciului.\",\n \"s11Title\": \"11. Separabilitate\",\n \"s11Body\": \"Dacă vreo dispoziție a acestor termeni este considerată nulă sau inaplicabilă de către o instanță competentă, acea dispoziție va fi limitată sau eliminată în măsura minimă necesară, iar celelalte dispoziții vor rămâne în deplină vigoare.\",\n \"linkPrivacy\": \"Politică de confidențialitate\",\n \"linkBack\": \"Înapoi la înregistrare\",\n \"linkBackSettings\": \"Înapoi la setări\",\n \"linkContact\": \"Pentru întrebări referitoare la acești termeni, contactați-ne prin formularul de contact de pe freelingo.app.\"\n },\n \"privacy\": {\n \"pageTitle\": \"Politică de confidențialitate\",\n \"updated\": \"Ultima actualizare: august 2026\",\n \"s1Title\": \"1. Prezentare generală\",\n \"s1Body\": \"FreeLingo este disponibil ca aplicație auto-găzduită și ca serviciu găzduit. Pentru implementările auto-găzduite, toate datele sunt stocate exclusiv pe serverul operatorului.\",\n \"s2Title\": \"2. Date pe care le colectăm\",\n \"s2Intro\": \"FreeLingo nu este destinat copiilor sub 16 ani. Când creezi un cont și folosești FreeLingo, sunt stocate următoarele date:\",\n \"s2i1\": \"Nume de utilizator, nume afișat și adresă de e-mail.\",\n \"s2i2\": \"Parolă hash (bcrypt — parola ta în text simplu nu este niciodată stocată).\",\n \"s2i3\": \"Preferințe de limbă și setări de învățare.\",\n \"s2i4\": \"Avatar de profil opțional.\",\n \"s2i5\": \"Istoricul chat-ului și conversațiilor cu tutorele AI.\",\n \"s2i6\": \"Seturi de carduri flash, progresul studiului și datele de repetiție spațiată.\",\n \"s2i7\": \"Rezultatele evaluărilor și progresul curricular.\",\n \"s2i8\": \"Starea abonamentului, tipul de plan şi identificatorul de client Stripe (pentru abonanţii serviciului plătit).\",\n \"s2i9\": \"Amintiri și preferințe globale ale contului, pe care tutorele AI le învață în conversații sau pe care le adaugi manual pentru a personaliza interacțiunile în toate limbile studiate.\",\n \"s2i10\": \"Sugestii, rapoarte de erori, comentarii și voturi pe care le trimiți prin panoul de sugestii. Doar numele tău de utilizator este afișat public; toți utilizatorii pot vedea sugestiile și rapoartele publicate.\",\n \"s3Title\": \"3. Cum folosim datele tale\",\n \"s3Intro\": \"Datele tale sunt folosite exclusiv pentru a furniza experiența de învățare FreeLingo:\",\n \"s3i1\": \"Autentificare și gestionarea sesiunilor.\",\n \"s3i2\": \"Personalizarea planului de studiu și interacțiunilor cu tutorele.\",\n \"s3i3\": \"Urmărirea progresului în învățare în timp.\",\n \"s3i4\": \"Generarea răspunsurilor contextuale ale tutorului AI.\",\n \"s3i5\": \"Reținerea preferințelor și contextului tău pentru ca tutorele AI să îți poată oferi interacțiuni mai personalizate.\",\n \"s3i6\": \"Afișarea și gestionarea sugestiilor și rapoartelor de erori ale comunității.\",\n \"s3Footer\": \"Datele tale nu vor fi niciodată vândute, închiriate sau partajate cu servicii de marketing terțe.\",\n \"s4Title\": \"4. Servicii AI externe\",\n \"s4Body\": \"În serviciul găzduit, chat-ul AI, sinteza vocală (TTS) şi transcrierea vocii (STT) sunt furnizate prin API-ul OpenAI. Conţinutul conversaţiilor şi audio-ul sunt trimise către OpenAI pentru procesare, conform Politicii de confidenţialitate a OpenAI (openai.com/privacy). Procesarea plăţilor este gestionată de Stripe, Inc. (SUA); Stripe procesează datele de plată direct şi nu stocăm datele cardului tău pe serverele noastre — datele tale de tranzacţie sunt supuse Politicii de confidenţialitate a Stripe (stripe.com/privacy).\",\n \"s5Title\": \"5. Cookie-uri și tokenuri de sesiune\",\n \"s5Body\": \"FreeLingo folosește două cookie-uri tehnice strict necesare: un refresh_token (httpOnly, expirare 30 de zile) și NEXT_LOCALE (expirare 1 an). Nu se folosesc cookie-uri de urmărire sau publicitate. Pentru măsurarea anonimă a traficului folosim Umami — un instrument de analiză auto-găzduit și open-source care nu utilizează cookie-uri, nu colectează date personale și păstrează toate datele pe serverele noastre.\",\n \"s6Title\": \"6. Drepturile tale (GDPR)\",\n \"s6Body\": \"Dacă te afli în Spațiul Economic European, ai dreptul de acces, rectificare, ștergere, opoziție și portabilitate a datelor. Pentru a exercita aceste drepturi, contactează-ne la adresa din secțiunea 8 sau șterge-ți contul din setări. Bază juridică a prelucrării (Art. 6(1)(b) GDPR): prelucrăm datele tale personale deoarece este necesar pentru executarea contractului dintre tine și noi. Transferări internaționale: la utilizarea serviciului găzduit, conținutul conversațiilor și audio pot fi procesate de OpenAI, Inc. (SUA), iar datele de plată sunt procesate de Stripe, Inc. (SUA). Aceste transferări se efectuează în baza Clauzelor Contractuale Standard aprobate de Comisia Europeană (Art. 46 GDPR). Drept de reclamație: ai dreptul de a depune o plângere la Autoritatea Națională de Supraveghere a Prelucrării Datelor cu Caracter Personal (ANSPDCP — dataprotection.ro) sau la autoritatea de supraveghere din țara ta de reședință.\",\n \"s7Title\": \"7. Retenția și ștergerea datelor\",\n \"s7Body\": \"Datele tale sunt păstrate cât timp există contul. Din Setări poți șterge amintiri individuale sau pe toate. Eliminarea unei limbi șterge datele specifice acelei limbi, dar păstrează amintirile globale ale contului. Poți șterge contul și toate datele asociate oricând din Setări; ștergerea contului este imediată și ireversibilă.\",\n \"s8Title\": \"8. Contact\",\n \"s8Body\": \"Pentru întrebări legate de confidențialitate, contactează-ne prin formularul de contact de pe freelingo.app.\",\n \"s9Title\": \"9. Separabilitate\",\n \"s9Body\": \"Dacă vreo dispoziție a acestei politici este considerată nulă sau inaplicabilă, aceasta va fi limitată în măsura minimă necesară, iar celelalte vor rămâne în vigoare.\",\n \"linkTerms\": \"Termeni și condiții\",\n \"linkBack\": \"Înapoi la înregistrare\",\n \"linkBackSettings\": \"Înapoi la setări\"\n }\n },\n \"dashboard\": {\n \"welcomeBack\": \"Bine ai revenit\",\n \"streak\": \"Serie\",\n \"xp\": \"XP\",\n \"level\": \"Nivel\",\n \"skills\": \"Abilități\",\n \"today\": \"Azi\",\n \"noSkills\": \"Finalizează evaluarea pentru a urmări abilitățile.\",\n \"noLessons\": \"Nicio lecție programată pentru azi.\",\n \"lessonDone\": \"finalizat\",\n \"startLesson\": \"Începe\",\n \"loadingProgress\": \"Se încarcă progresul...\",\n \"noLevel\": \"Niciun nivel setat încă.\",\n \"completeAssessment\": \"Fă evaluarea\",\n \"allCaughtUp\": \"Ești la zi.\",\n \"startWithAssessment\": \"Începe cu o evaluare.\",\n \"takeAssessmentArrow\": \"Fă evaluarea →\",\n \"goToMyPlan\": \"Planul meu →\",\n \"quickActions\": \"Acțiuni rapide\",\n \"dayProgress\": \"Ziua {current} din {total}\",\n \"skipDay\": \"Sari astăzi\",\n \"pendingLessons\": \"lecții în așteptare\",\n \"nextStep\": \"Pasul următor\",\n \"assessmentCreatesPlan\": \"Evaluarea îți găsește nivelul și creează un plan personalizat pentru limba activă.\",\n \"lessonReady\": \"Lecție pregătită\",\n \"pendingStillAvailable\": \"Ai {count} lecții anterioare în așteptare în plan.\",\n \"noPendingToday\": \"Ai terminat lecțiile de azi. Poți verifica planul sau exersa o altă activitate.\",\n \"lessonsCompleted\": \"Lecții\",\n \"accuracy\": \"Acuratețe\",\n \"exerciseStats\": \"{correct}/{total} exerciții\",\n \"noExercisesYet\": \"Încă nu există exerciții\",\n \"planProgress\": \"Progresul planului\",\n \"currentDay\": \"Ziua curentă\",\n \"daysRemaining\": \"Zile rămase\",\n \"completedToday\": \"{completed}/{total} făcute\",\n \"vocabularyProgress\": \"Vocabular {level}\",\n \"vocabularyWords\": \"{mastered}/{total} cuvinte\",\n \"recentPerformance\": \"Performanță recentă\",\n \"recentPerformanceDescription\": \"Bazată pe ultimele tale răspunsuri și recapitulări.\",\n \"performanceNeedsPractice\": \"Necesită practică\",\n \"performanceInProgress\": \"În progres\",\n \"performanceStrong\": \"Puternic\",\n \"premiumBannerTitle\": \"Deblochează conversație, listening și reading\",\n \"premiumBannerDesc\": \"Începe cu o probă gratuită și exersează cu Lingu prin text, voce și exerciții adaptate nivelului tău.\",\n \"premiumBannerDescTrialUsed\": \"Activează Premium pentru a debloca chat cu Lingu, conversație vocală, reading și listening.\",\n \"premiumBannerCta\": \"Probă gratuită\",\n \"premiumBannerCtaTrialUsed\": \"Vezi planurile\",\n \"premiumBannerPastDueTitle\": \"Plată în așteptare\",\n \"premiumBannerPastDueDesc\": \"Actualizează metoda de plată pentru a restabili accesul Premium la chat, conversație vocală, reading și listening.\",\n \"premiumBannerPastDueCta\": \"Restabilește Premium\",\n \"freemiumTrialTitle\": \"{days, plural, one {# zi de test gratuit} other {# zile de test gratuit}}\",\n \"freemiumTrialDesc\": \"Bucură-te de acces nelimitat la chat, voce, listening și reading. Încearcă tot Premium gratuit.\"\n },\n \"assessment\": {\n \"title\": \"Evaluare\",\n \"subtitle\": \"Plasare CEFR\",\n \"intro\": \"Îți vom pune câteva întrebări pentru a determina nivelul tău de engleză.\",\n \"startWriting\": \"Începe evaluarea scrisă\",\n \"startQuiz\": \"Începe quiz-ul\",\n \"writing\": {\n \"title\": \"Eșantion de scriere\",\n \"submit\": \"Trimite textul\",\n \"placeholder\": \"Scrie răspunsul tău aici...\",\n \"evaluating\": \"Se evaluează...\"\n },\n \"quiz\": {\n \"question\": \"Întrebarea\",\n \"of\": \"din\",\n \"next\": \"Următor\",\n \"submit\": \"Trimite quiz-ul\",\n \"submitting\": \"Se trimite...\"\n },\n \"result\": {\n \"title\": \"Nivelul tău\",\n \"xpEarned\": \"XP câștigat\",\n \"skillsTitle\": \"Abilități\",\n \"goToPlan\": \"Vezi planul meu\",\n \"generatePlan\": \"Generează plan de studiu\"\n },\n \"currentLevel\": \"Nivel curent\",\n \"assessedOn\": \"Evaluat pe\",\n \"alreadyHasPlan\": \"Ai deja un plan de studiu activ. Re-evaluarea va crea un plan nou.\",\n \"retake\": \"Refă evaluarea\",\n \"evaluating\": \"Se evaluează...\",\n \"resultStep\": \"Rezultat\",\n \"cefrLevel\": \"Nivel CEFR\",\n \"overrideLevel\": \"Suprascrie nivelul de start\",\n \"strengths\": \"Puncte forte\",\n \"needsWork\": \"Necesită îmbunătățire\",\n \"createPlan\": \"Creează plan →\",\n \"creating\": \"Se creează...\",\n \"loading\": \"Se încarcă...\",\n \"levelTest\": {\n \"title\": \"Test de finalizare a nivelului\",\n \"loading\": \"Se încarcă întrebările...\",\n \"loadingTest\": \"Se încarcă testul...\",\n \"submittingTest\": \"Se trimit răspunsurile...\",\n \"question\": \"Întrebarea\",\n \"of\": \"din\",\n \"confirm\": \"Confirmă răspunsul\",\n \"nextQuestion\": \"Întrebarea următoare\",\n \"submit\": \"Trimite testul\",\n \"result\": {\n \"title\": \"Test finalizat\",\n \"recommendation\": \"Recomandare\",\n \"advance\": \"Gata să avansezi la nivelul următor\",\n \"extend\": \"Continuă la nivelul curent\",\n \"repeat\": \"Se recomandă repetarea nivelului curent\",\n \"back\": \"Înapoi la plan\"\n }\n },\n \"suggestedLevel\": \"Sugerat {aiLevel}; planul folosește {selectedLevel}\",\n \"step1\": \"Pasul 1 / 3: nivelul tău\",\n \"step2\": \"Pasul 2 / 3: întrebarea {questionNumber} / {totalQuestions}\",\n \"step3\": \"Pasul 3 / 3: programul tău\",\n \"studiedBefore\": \"Ai studiat {language} înainte?\",\n \"studiedBeforeHint\": \"Aceasta ne ajută să pornim quiz-ul la nivelul potrivit.\",\n \"beginnerOption\": \"Sunt un începător complet\",\n \"beginnerOptionHint\": \"Încep de la A1, fără quiz.\",\n \"hasExperienceOption\": \"Da, am ceva experiență\",\n \"hasExperienceOptionHint\": \"Voi face un scurt quiz adaptiv (±12 întrebări).\",\n \"skills\": {\n \"grammar\": \"Gramatică\",\n \"vocabulary\": \"Vocabular\",\n \"reading\": \"Lectură\"\n },\n \"howManyWeeks\": \"Câte săptămâni pentru nivelul {cefr_level}?\",\n \"nWeeks\": \"{count} săptămâni\",\n \"intensity\": {\n \"intensive\": \"Intensiv\",\n \"standard\": \"Standard\",\n \"relaxed\": \"Relaxat\",\n \"veryRelaxed\": \"Foarte relaxat\"\n },\n \"approxLessons\": \"~{count} lecții\",\n \"daysPerWeek\": \"{count} zile/săptămână\",\n \"mainGoals\": \"Obiective principale (selectează tot ce se aplică)\",\n \"goals\": {\n \"grammar\": \"Gramatică\",\n \"vocabulary\": \"Vocabular\",\n \"reading\": \"Lectură\",\n \"writing\": \"Scriere\",\n \"conversation\": \"Conversație\",\n \"listening\": \"Listening\"\n },\n \"summaryLevel\": \"Nivel\",\n \"summaryDuration\": \"Durată\",\n \"summaryGoals\": \"Obiective\",\n \"noneSelected\": \"nimic selectat\",\n \"buildingPlan\": \"Se construiește planul...\",\n \"startWarningTitle\": \"Înainte de a începe\",\n \"startWarningMessage\": \"Dacă părăsești evaluarea înainte de a o finaliza, progresul tău va fi pierdut și va trebui să o iei de la capăt.\",\n \"startWarningMessageLevelTest\": \"Dacă părăsești testul de nivel înainte de a-l finaliza, progresul tău va fi pierdut și va trebui să îl refaci.\",\n \"startWarningConfirm\": \"Începe\",\n \"startMyPlan\": \"Pornește planul meu\",\n \"voiceTrialLabel\": \"Voice trial\",\n \"voiceTrialTitle\": \"Try a real conversation now\",\n \"voiceTrialDesc\": \"Talk with Lingu for {minutes} minutes, free. Your tutor will adapt to the level you just unlocked.\",\n \"voiceTrialStart\": \"Start free conversation\",\n \"voiceTrialSkip\": \"Skip for now\"\n },\n \"plan\": {\n \"title\": \"Planul meu\",\n \"subtitle\": \"Plan de studiu\",\n \"noPlan\": \"Nu a fost găsit niciun plan de studiu activ.\",\n \"startAssessment\": \"Fă mai întâi o evaluare\",\n \"week\": \"Săptămâna\",\n \"currentLesson\": \"Lecția curentă\",\n \"startLesson\": \"Începe lecția\",\n \"completed\": \"Finalizat\",\n \"generating\": \"Se generează lecția...\",\n \"generatingError\": \"Generarea lecției a eșuat\",\n \"loading\": \"Se încarcă planul...\",\n \"learningRoadmap\": \"Foaia de parcurs\",\n \"level\": \"Nivel\",\n \"duration\": \"Durată\",\n \"durationDetail\": \"{weeks} săptămâni · {days} zile/săptămână\",\n \"unitsLabel\": \"Unități\",\n \"noUnitsForLevel\": \"Nu sunt unități disponibile pentru nivelul {level}\",\n \"takeAssessmentArrow\": \"Fă evaluarea →\",\n \"unitLabel\": \"Unitatea\",\n \"grammarCovered\": \"Gramatică acoperită\",\n \"noLessons\": \"Nicio lecție planificată pentru această unitate încă.\",\n \"weekDay\": \"Săptămâna {week}, ziua {day}\",\n \"lessonTypes\": {\n \"grammar\": \"Gramatică\",\n \"vocabulary\": \"Vocabular\",\n \"reading\": \"Lectură\",\n \"writing\": \"Scriere\",\n \"conversation\": \"Conversație\",\n \"review\": \"Recapitulare\",\n \"level_test\": \"Test de nivel\"\n },\n \"levelComplete\": \"Nivelul {level} finalizat. Fă testul de nivel\",\n \"levelCompleteDesc\": \"Ai finalizat toate unitățile pentru nivelul {level}. Fă testul de finalizare a nivelului pentru a confirma progresul și a debloca nivelul următor.\",\n \"levelCompleteHint\": \"Testul durează aproximativ 20 de minute și acoperă gramatică, vocabular și lectură.\",\n \"beginLevelTest\": \"Începe testul de nivel\",\n \"nLessons\": \"{count} lecții\",\n \"nGrammar\": \"{count} gramatică\",\n \"levelTestLabel\": \"Test de nivel\",\n \"unitAriaLabel\": \"Unitatea {index}: {title}\",\n \"noUnitsDesc\": \"Conținutul pentru acest nivel este în pregătire. Revino curând.\",\n \"completionTestTitle\": \"Test de finalizare a nivelului {level}\",\n \"levelTestResult\": \"Rezultatul testului de nivel\",\n \"testScore\": \"Scor:\",\n \"pendingLessons\": \"Lecții restante\",\n \"resume\": \"Reia\",\n \"lessonsHeader\": \"Lecții · {count}\",\n \"reviewLesson\": \"Revizuiește\",\n \"noPlanLabel\": \"ÎNCEPE\",\n \"noPlanTitle\": \"Creează-ți planul de studiu\",\n \"noPlanDesc\": \"Fă o evaluare rapidă pentru a-ți descoperi nivelul și a obține un plan de învățare personalizat.\",\n \"noPlanHint\": \"Durează aproximativ 10 minute\"\n },\n \"lesson\": {\n \"loading\": \"Se încarcă lecția...\",\n \"notFound\": \"Lecția nu a fost găsită\",\n \"backToPlan\": \"Înapoi la plan\",\n \"progress\": \"Progres\",\n \"exercise\": \"Exercițiu\",\n \"of\": \"din\",\n \"checkAnswer\": \"Verifică răspunsul\",\n \"nextExercise\": \"Exercițiul următor\",\n \"submitWriting\": \"Trimite textul\",\n \"yourAnswer\": \"Răspunsul tău...\",\n \"correct\": \"Corect\",\n \"incorrect\": \"Incorect\",\n \"feedback\": \"Feedback\",\n \"completeLesson\": \"Finalizează lecția\",\n \"completing\": \"Se finalizează...\",\n \"relatedGrammar\": \"Gramatică conexă\",\n \"explanation\": \"Explicație\",\n \"exercises\": \"Exerciții\",\n \"vocabulary\": \"Vocabular\",\n \"label\": \"Lecție\",\n \"submitAnswer\": \"Trimite răspunsul\",\n \"lessonDone\": \"Lecție finalizată\",\n \"score\": \"Scor\",\n \"showNativeExplanation\": \"Arată în\",\n \"hint\": \"Indiciu\",\n \"showNativeHint\": \"Arată indiciu în\",\n \"regenerateExercise\": \"Regenerează exercițiul\",\n \"regeneratingExercise\": \"Se regenerează...\",\n \"regenerateError\": \"Exercițiul nu a putut fi regenerat. Încearcă din nou.\",\n \"regenerateNotNeeded\": \"Acest exercițiu nu trebuie regenerat.\",\n \"examples\": \"Exemple\",\n \"commonTraps\": \"Greșeli frecvente\",\n \"miniGlossary\": \"Mini glosar\",\n \"pronunciationExercise\": \"Pronunție\",\n \"exerciseTypeMultipleChoice\": \"Alegere multiplă\",\n \"exerciseTypeFillBlank\": \"Completează spațiul\",\n \"exerciseTypeFreeWrite\": \"Scriere liberă\",\n \"exerciseTypePronunciation\": \"Pronunție\",\n \"tapToListen\": \"Apasă pentru a asculta\",\n \"recordNow\": \"Înregistrează răspunsul tău\",\n \"exit\": \"Ieși\",\n \"exitConfirmTitle\": \"Ieșiți din lecție?\",\n \"exitConfirmMessage\": \"Progresul dvs. la această lecție va fi pierdut.\",\n \"dayComplete\": \"Ziua finalizată!\",\n \"dayCompleteMsg\": \"Toate lecțiile de astăzi sunt finalizate.\"\n },\n \"flashcards\": {\n \"title\": \"Carduri flash\",\n \"due\": \"De repetat\",\n \"total\": \"Total\",\n \"noDue\": \"Niciun card de repetat\",\n \"allCaughtUp\": \"Ești la zi!\",\n \"generate\": \"Generează carduri flash\",\n \"generating\": \"Se generează...\",\n \"topic\": \"Subiect\",\n \"topicPlaceholder\": \"ex. vocabular de călătorie\",\n \"count\": \"Număr\",\n \"level\": \"Nivel\",\n \"submit\": \"Generează\",\n \"again\": \"Din nou\",\n \"hard\": \"Dificil\",\n \"good\": \"Bine\",\n \"easy\": \"Ușor\",\n \"front\": \"Cuvânt\",\n \"back\": \"Definiție\",\n \"loading\": \"Se încarcă cardurile flash...\",\n \"sectionGenerate\": \"Generează carduri noi\",\n \"speakingMode\": \"Vorbire\",\n \"standardMode\": \"Standard\",\n \"sayWord\": \"Spune cuvântul cu voce tare\",\n \"refresh\": \"Reîmprospătează\",\n \"generateBtn\": \"Generează\",\n \"cards\": \"carduri\",\n \"myVocabularyBtn\": \"Vocabularul meu\",\n \"myVocabulary\": \"Vocabularul meu\",\n \"myVocabularyEmpty\": \"Niciun cuvânt salvat încă. Selectează un cuvânt în timp ce citeşti pentru a-l salva aici.\",\n \"myVocabularyNoResults\": \"Niciun cuvânt salvat nu corespunde căutării tale.\",\n \"vocabularySearch\": \"Caută cuvinte...\",\n \"vocabularyPageInfo\": \"Pagina {page} din {pages}\",\n \"vocabularyPrev\": \"Prec.\",\n \"vocabularyNext\": \"Urm.\",\n \"backToFlashcards\": \"Carduri flash\",\n \"noCardsHint\": \"Folosește + Generează pentru a crea primele carduri flash cu AI\",\n \"tapToHide\": \"atinge pentru a ascunde\",\n \"tapToReveal\": \"atinge pentru a dezvălui\",\n \"interval\": \"Interval\",\n \"repetitions\": \"Rep\"\n },\n \"chat\": {\n \"title\": \"Tutore AI\",\n \"subtitle\": \"{language} — Întreabă orice\",\n \"placeholder\": \"Scrie un mesaj...\",\n \"send\": \"Trimite\",\n \"sending\": \"Se trimite...\",\n \"noConversation\": \"Selectează sau începe o conversație\",\n \"newConversation\": \"Nou\",\n \"toggleSidebarShow\": \"Arată chat-urile\",\n \"toggleSidebarHide\": \"Ascunde chat-urile\",\n \"conversations\": \"Conversații\",\n \"loading\": \"Se încarcă...\",\n \"thinking\": \"Se gândește...\",\n \"takingLonger\": \"Durează mai mult decât de obicei...\",\n \"errorMessage\": \"Ceva a mers greșit. Încearcă din nou.\",\n \"deleteTitle\": \"Șterge chat-ul\",\n \"deleteMessage\": \"Această conversație va fi ștearsă permanent.\",\n \"deleteConfirm\": \"Șterge\",\n \"enterToSend\": \"Enter pentru a trimite\",\n \"continueInVoice\": \"Continuă cu voce\",\n \"memoryUpdated\": \"Memorie actualizată\"\n },\n \"progress\": {\n \"title\": \"Progres\",\n \"subtitle\": \"Prezentare generală a abilităților\",\n \"xp\": \"XP\",\n \"streak\": \"Serie\",\n \"lessons\": \"Lecții\",\n \"accuracy\": \"Acuratețe\",\n \"noPlan\": \"Niciun plan de studiu activ.\",\n \"startPlan\": \"Începe evaluarea\",\n \"competencies\": \"Competențe de unitate\",\n \"vocabularySection\": \"Vocabular\",\n \"skills\": \"Acuratețea abilităților\",\n \"mastered\": \"Stăpânit\",\n \"inProgress\": \"În curs\",\n \"notStarted\": \"Neînceput\",\n \"loading\": \"Se încarcă progresul...\",\n \"days\": \"zile\",\n \"noData\": \"Finalizează câteva lecții pentru a vedea progresul tău aici.\",\n \"exploreVocab\": \"Explorează seturi de vocabular\",\n \"competenciesSection\": \"Competențe gramaticale {level}\",\n \"noCompetencies\": \"Finalizează lecții pentru a urmări competențele.\",\n \"goToMyPlan\": \"→ La planul meu\",\n \"addToFlashcards\": \"Adaugă cuvinte dintr-un set în pachetul tău de carduri flash pentru a urmări progresul individual al cuvintelor.\",\n \"noActivePlanDesc\": \"Finalizează evaluarea pentru a urmări abilitățile.\",\n \"vocabularyHeader\": \"Vocabular {level}\",\n \"currentLevelOnly\": \"Doar nivelul curent\",\n \"allLevels\": \"Toate nivelurile\"\n },\n \"grammar\": {\n \"title\": \"Referință gramaticală\",\n \"subtitle\": \"Referință\",\n \"searchPlaceholder\": \"Caută subiecte de gramatică...\",\n \"allLevels\": \"Toate nivelurile\",\n \"allCategories\": \"Toate\",\n \"noResults\": \"Nu s-au găsit subiecte.\",\n \"structure\": \"Structură\",\n \"keyRules\": \"Reguli cheie\",\n \"examples\": \"Exemple\",\n \"commonMistakes\": \"Greșeli frecvente\",\n \"relatedTopics\": \"Subiecte conexe\",\n \"backToGrammar\": \"Referință gramaticală\",\n \"explanation\": \"Explicație\",\n \"backLink\": \"Înapoi la gramatică\",\n \"notFound\": \"Subiect negăsit.\",\n \"topicsFound\": \"{count, plural, one {# subiect găsit} other {# subiecte găsite}}\"\n },\n \"vocabulary\": {\n \"title\": \"Centrul de vocabular\",\n \"subtitle\": \"Vocabular\",\n \"all\": \"Toate\",\n \"searchPlaceholder\": \"Caută seturi...\",\n \"sets\": \"seturi\",\n \"words\": \"cuvinte\",\n \"addAll\": \"Adaugă toate cele {count} la carduri flash\",\n \"adding\": \"Se adaugă...\",\n \"added\": \"{count} carduri flash adăugate\",\n \"addError\": \"Adăugarea cardurilor flash a eșuat\",\n \"frequency\": \"frecv.\",\n \"backToVocabulary\": \"Centrul de vocabular\",\n \"notFound\": \"Setul nu a fost găsit.\",\n \"vocabularySet\": \"Set de vocabular\",\n \"cardsAdded\": \"{count} carduri adăugate în pachetul tău de carduri flash.\",\n \"goToFlashcards\": \"La cardurile flash →\",\n \"addFailed\": \"Adăugarea cardurilor flash a eșuat.\",\n \"noResults\": \"Niciun set de vocabular nu corespunde căutării tale\"\n },\n \"phrasebook\": {\n \"title\": \"Ghid de fraze\",\n \"subtitle\": \"Fraze\",\n \"all\": \"Toate\",\n \"allRegisters\": \"Toate registrele\",\n \"formal\": \"Formal\",\n \"neutral\": \"Neutru\",\n \"informal\": \"Informal\",\n \"copied\": \"Copiat!\",\n \"copy\": \"Copiază\",\n \"noResults\": \"Nicio frază nu corespunde filtrelor tale\",\n \"level\": \"Nivel\",\n \"register\": \"Registru\",\n \"statsLine\": \"{situationCount} situații · {phraseCount} fraze · {range}\",\n \"situationsShown\": \"{count, plural, one {# situație afișată} other {# situații afișate}}\",\n \"searchPlaceholder\": \"Caută fraze...\"\n },\n \"admin\": {\n \"title\": \"Admin\",\n \"overview\": \"Prezentare generală\",\n \"users\": \"Utilizatori\",\n \"feedback\": \"Feedback\",\n \"reviews\": \"Recenzii\",\n \"system\": \"Sistem\",\n \"invites\": \"Linkuri de invitație\",\n \"createUser\": \"Creează utilizator\",\n \"createInvite\": \"Generează invitație\",\n \"deactivate\": \"Dezactivează\",\n \"activate\": \"Activează\",\n \"loading\": \"Se încarcă...\",\n \"loadError\": \"Încărcarea datelor utilizatorului a eșuat\",\n \"userNotFound\": \"Utilizatorul nu a fost găsit\",\n \"role\": \"Rol\",\n \"status\": \"Stare\",\n \"active\": \"Activ\",\n \"inactive\": \"Inactiv\",\n \"inviteCreated\": \"Link de invitație creat\",\n \"copyLink\": \"Copiază linkul\",\n \"inviteCopied\": \"Link de invitație copiat\",\n \"deleteUser\": \"Șterge utilizatorul\",\n \"deleteUserMessage\": \"Ștergeți acest utilizator? Această acțiune nu poate fi anulată.\",\n \"deleteConfirm\": \"Șterge\",\n \"noUsers\": \"Nu s-au găsit utilizatori\",\n \"inviteLink\": \"Link de invitație (valabil 48h)\",\n \"total\": \"total\",\n \"delete\": \"Șterge\",\n \"inviteBtn\": \"Link de invitație\",\n \"createUserBtn\": \"Creează utilizator\",\n \"prevPage\": \"← Anterior\",\n \"nextPage\": \"Următor →\",\n \"roleUser\": \"Utilizator\",\n \"roleAdmin\": \"Admin\",\n \"fieldUsername\": \"Nume de utilizator\",\n \"invalidUsernameChars\": \"Numele de utilizator poate conține doar litere, cifre, cratime, underscore și puncte\",\n \"fieldEmail\": \"E-mail\",\n \"fieldPassword\": \"Parolă\",\n \"fieldDisplayName\": \"Nume afișat\",\n \"fieldNativeLanguage\": \"Limbă maternă\",\n \"fieldTargetLanguage\": \"Limbă de învățat\",\n \"fieldRole\": \"Tip cont\",\n \"submitCreate\": \"Creează\",\n \"searchPlaceholder\": \"Caută după nume de utilizator sau e-mail...\",\n \"statsTitle\": \"Statistici de utilizare\",\n \"statsCefr\": \"Nivel curent\",\n \"statsUnit\": \"Unitatea curentă\",\n \"statsPlanWeeks\": \"Durata planului\",\n \"sectionXpProgress\": \"XP și progres\",\n \"statsXp\": \"XP total\",\n \"statsStreak\": \"Serie\",\n \"statsActiveDays\": \"Zile active\",\n \"statsLessons\": \"Lecții finalizate\",\n \"statsExercises\": \"Exerciții corecte\",\n \"statsMessages\": \"Mesaje trimise\",\n \"statsTokensTotal\": \"Tokenuri consumate (total)\",\n \"statsTokensChat\": \"Tokenuri tutore\",\n \"statsTokensConversation\": \"Tokenuri conversație\",\n \"statsTokensNote\": \"Disponibil numai când furnizorul AI returnează aceste informații\",\n \"statsNoData\": \"Nu există date de progres\",\n \"viewStats\": \"Vezi statistici\",\n \"weeks\": \"săptămâni\",\n \"statsTestScore\": \"Scor test final\",\n \"statsDays\": \"zile\",\n \"sectionQuota\": \"Cotă conversații\",\n \"quotaWeeklySessions\": \"Limită sesiuni săptămânale\",\n \"quotaDailyMinutes\": \"Limită minute zilnice\",\n \"quotaWeeklyMinutes\": \"Limită minute săptămânale\",\n \"quotaUnlimitedLabel\": \"Nelimitat (0)\",\n \"quotaUsedSessions\": \"Utilizate această săptămână\",\n \"quotaUsedMinutes\": \"Utilizate azi\",\n \"quotaUsedWeeklyMinutes\": \"Utilizate această săptămână (min)\",\n \"quotaSave\": \"Salvează cota\",\n \"quotaSaved\": \"Cotă salvată.\",\n \"emailVerified\": \"E-mail verificat\",\n \"emailNotVerified\": \"E-mail neverificat\",\n \"verifyEmail\": \"Verifică e-mail\",\n \"unverifyEmail\": \"Marchează ca neverificat\",\n \"emailVerifiedSuccess\": \"E-mail marcat ca verificat.\",\n \"emailUnverifiedSuccess\": \"E-mail marcat ca neverificat.\",\n \"quotaMonthlyTokens\": \"Limită lunară de tokeni\",\n \"fieldSubscription\": \"Abonament\",\n \"fieldEndsRenews\": \"Expiră / reînnoiește\",\n \"fieldStripeCustomer\": \"Client Stripe\",\n \"maintenanceTitle\": \"Mod mentenanță\",\n \"maintenanceOn\": \"ACTIV\",\n \"maintenanceEnable\": \"Activează mentenanța\",\n \"maintenanceDisable\": \"Dezactivează mentenanța\",\n \"maintenanceDesc\": \"Când este activat, toate funcțiile de abonament (chat, conversații vocale, exerciții de ascultare și citire) vor fi indisponibile pentru toți utilizatorii.\",\n \"cannotDeactivateSelf\": \"Nu îți poți dezactiva propriul cont\",\n \"cannotDeleteSelf\": \"Nu îți poți șterge propriul cont\",\n \"sectionLanguages\": \"Limbi\",\n \"sectionActivity\": \"Activitate\",\n \"statsActive\": \"Activ\",\n \"manageUsers\": \"Gestionează utilizatori\",\n \"manageUsersDesc\": \"Revizuiește conturile, abonamentele, rolurile și starea accesului.\",\n \"createUserDesc\": \"Creează un cont de utilizator administrat cu o limbă inițială de studiu.\",\n \"reviewFeedback\": \"Revizuiește feedbackul\",\n \"reviewFeedbackDesc\": \"Triază cererile de funcționalități și rapoartele de erori de la cursanți.\",\n \"reviewReviews\": \"Revizuiește recenziile\",\n \"reviewReviewsDesc\": \"Aprobă recenziile verificate ale cursanților pentru afișare pe pagina principală.\",\n \"maintenanceOnDesc\": \"Modul de mentenanță este activ pentru instrumentele de învățare care necesită abonament.\",\n \"maintenanceOffDesc\": \"Modul de mentenanță este dezactivat. Instrumentele care necesită abonament sunt disponibile.\",\n \"openSystemControls\": \"Controale de sistem\",\n \"adminRequired\": \"Este necesar acces de administrator\",\n \"usersLoadError\": \"Nu s-au putut încărca utilizatorii\",\n \"createUserError\": \"Nu s-a putut crea utilizatorul\",\n \"updateUserError\": \"Nu s-a putut actualiza utilizatorul\",\n \"deleteUserError\": \"Nu s-a putut șterge utilizatorul\",\n \"inviteError\": \"Nu s-a putut genera linkul de invitație\",\n \"copyInviteError\": \"Nu s-a putut copia linkul de invitație\",\n \"maintenanceError\": \"Nu s-a putut actualiza modul de mentenanță\",\n \"maintenanceOff\": \"OPRIT\",\n \"inviteExpiry\": \"Link de unică folosință. Expiră după 48 de ore.\",\n \"searchAction\": \"Caută utilizatori\",\n \"roleFilter\": \"Filtrează după rol\",\n \"statusFilter\": \"Filtrează după stare\",\n \"subscriptionFilter\": \"Filtrează după abonament\",\n \"allRoles\": \"Toate rolurile\",\n \"allStatuses\": \"Toate stările\",\n \"allSubscriptions\": \"Toate abonamentele\",\n \"clearFilters\": \"Șterge\",\n \"userColumn\": \"Utilizator\",\n \"actions\": \"Acțiuni\",\n \"createUserSheetDesc\": \"Contul este creat imediat. Verificarea prin e-mail este trimisă când e-mailul este activat.\",\n \"activateUser\": \"Activează utilizatorul\",\n \"deactivateUser\": \"Dezactivează utilizatorul\",\n \"activateUserMessage\": \"Activezi acest cont de utilizator?\",\n \"deactivateUserMessage\": \"Dezactivezi acest cont de utilizator? Nu va putea folosi aplicația până la reactivare.\",\n \"tabProfile\": \"Profil\",\n \"tabLanguages\": \"Limbi\",\n \"tabActivity\": \"Activitate\",\n \"tabQuota\": \"Cote\",\n \"tabSubscription\": \"Abonament\",\n \"sectionCommunication\": \"Comunicare\",\n \"quotaCurrentUsage\": \"Utilizare curentă\",\n \"quotaConfiguredLimits\": \"Limite configurate\",\n \"unitMinutes\": \"min\",\n \"unitSessions\": \"sesiuni\",\n \"unitTokens\": \"tokeni\",\n \"quotaZeroMeansUnlimited\": \"Setează o limită la 0 pentru acces nelimitat.\",\n \"quotaValidationError\": \"Toate valorile cotelor trebuie să fie numere întregi mai mari sau egale cu 0.\",\n \"quotaSaveError\": \"Nu s-au putut salva limitele cotelor.\",\n \"subscriptionOverride\": \"Modificare manuală a abonamentului\",\n \"subscriptionOverrideDesc\": \"Aceasta schimbă direct perioada de acces a utilizatorului și poate suprascrie starea gestionată de Stripe.\",\n \"subscriptionUpdateError\": \"Nu s-a putut actualiza abonamentul.\",\n \"saving\": \"Se salvează...\",\n \"verifyEmailConfirmMessage\": \"Marchezi această adresă de e-mail ca verificată?\",\n \"unverifyEmailConfirmMessage\": \"Marchezi această adresă de e-mail ca neverificată?\",\n \"subscriptionConfirmTitle\": \"Schimbă abonamentul\",\n \"subscriptionConfirmMessage\": \"Aplici planul de abonament: {plan}?\",\n \"subscriptionConfirm\": \"Aplică\",\n \"feedbackStatusError\": \"Nu s-a putut actualiza starea feedbackului.\",\n \"feedbackDeleteError\": \"Nu s-a putut șterge intrarea de feedback.\",\n \"allFeedback\": \"Tot feedbackul\",\n \"feedbackTotal\": \"Feedback total\",\n \"feedbackQueue\": \"Coadă feedback\",\n \"feedbackSearchPlaceholder\": \"Caută după titlu, descriere sau autor...\",\n \"feedbackSearchAction\": \"Caută feedback\",\n \"feedbackTypeFilter\": \"Filtrează după tipul feedbackului\",\n \"noFilteredFeedback\": \"Niciun feedback nu corespunde filtrelor actuale.\",\n \"feedbackItem\": \"Intrare\",\n \"type\": \"Tip\",\n \"signals\": \"Semnale\",\n \"feedbackStatusAction\": \"Schimbă starea feedbackului\",\n \"adminStatsError\": \"Nu s-au putut încărca metricile de administrare.\",\n \"activeUsers\": \"Utilizatori activi\",\n \"paidAccess\": \"Active / probă\",\n \"pendingFeedback\": \"Feedback în așteptare\",\n \"pendingReviews\": \"Recenzii în așteptarea aprobării\",\n \"operationalAlerts\": \"Alerte operaționale\",\n \"pendingBugs\": \"Erori în așteptare\",\n \"pendingBugsDesc\": \"Rapoarte de erori care așteaptă trierea de către administrator.\",\n \"pastDueSubscriptions\": \"Abonamente restante\",\n \"pastDueSubscriptionsDesc\": \"Conturi cu probleme de plată care pot necesita revizuire.\"\n },\n \"faq\": {\n \"title\": \"Întrebări frecvente\",\n \"subtitle\": \"Întrebări frecvente\",\n \"q_start\": \"De unde încep?\",\n \"a_start\": \"Începe cu Evaluarea. Aceasta detectează nivelul tău de engleză (A1–C2) și punctele forte și slabe. Cu acel rezultat poți genera un Plan de studiu personalizat care îți va umple tabloul de bord cu lecții zilnice.\",\n \"q_workflow\": \"Care este fluxul complet de lucru?\",\n \"workflowStep1\": \"Înregistrează-te și selectează limba ta maternă\",\n \"workflowStep2\": \"Fă evaluarea → nivelul tău CEFR este determinat\",\n \"workflowStep3\": \"Generează planul de studiu din tabloul de bord\",\n \"workflowStep4\": \"Finalizează lecțiile zilnice (butonul START din tabloul de bord)\",\n \"workflowStep5\": \"Folosește carduri flash pentru a antrena vocabularul în paralel\",\n \"workflowStep6\": \"Exersează conversația liberă cu tutorele AI\",\n \"q_language\": \"Ce limbă voi învăța?\",\n \"a_language\": \"FreeLingo suportă în prezent mai multe limbi (chineză continentală, coreeană, engleză americană, engleză britanică, franceză, germană, italiană, japoneză, portugheză, spaniolă) și vom adăuga mai multe în timp. Când o nouă limbă devine disponibilă, o vei găsi în Setări → Limbile mele — adaug-o și începe să înveți imediat.\",\n \"q_assessment\": \"Ce este Evaluarea?\",\n \"a_assessment\": \"Un test generat de AI cu 15 de întrebări despre gramatică, vocabular, înțelegerea lecturii și transformarea propozițiilor, cu dificultate de la A1 la C1.\",\n \"q_studyPlan\": \"Ce este Planul de studiu și cum îl generez?\",\n \"a_studyPlan\": \"După Evaluare, mergi la tabloul de bord și apasă Generează plan de studiu. Va fi creat automat un plan săptămânal cu lecții zilnice adaptate nivelului și obiectivelor tale CEFR.\",\n \"q_resources\": \"Ce sunt Resursele?\",\n \"a_resources\": \"Secțiunea Resurse reunește material de referință independent de Planul tău de studiu: gramatică pe niveluri, seturi de vocabular și expresii utile. O poți folosi oricând pentru recapitulare, explicații sau extinderea vocabularului fără să aștepți o lecție zilnică.\",\n \"q_flashcards\": \"La ce folosesc Cardurile flash?\",\n \"a_flashcards\": \"Un sistem de antrenament al vocabularului care folosește algoritmul de repetiție spațiată SM-2. Generează carduri pe orice subiect cu o definiție, propoziție exemplu și traducere în limba ta maternă.\",\n \"q_vocabulary\": \"Cum adaug cuvinte în vocabularul meu?\",\n \"a_vocabulary\": \"Poți salva cuvinte în două moduri: (1) În timp ce citești o lecție, un exercițiu de ascultare sau discuți cu tutorele, selectează orice cuvânt cu mouse-ul și dă clic pe Salvează în tooltip-ul care apare — IA va genera o definiție, o propoziție exemplu și o traducere în limba ta maternă. (2) Mergi la Vocabular, deschide un set de vocabular pentru nivelul tău și dă clic pe Adaugă toate pentru a importa întregul set dintr-o dată. Cuvintele tale salvate apar în Vocabularul meu în secțiunea Carduri flash.\",\n \"q_tutor\": \"Cum funcționează tutorele AI?\",\n \"a_tutor\": \"Un chat în format liber cu streaming. Tutorele cunoaște nivelul tău CEFR și punctele slabe pentru a-și adapta răspunsurile. Pune întrebări de gramatică, cere explicații, exersează scrierea în engleză sau pur și simplu poartă o conversație.\",\n \"q_voice\": \"Cum funcționează conversația vocală?\",\n \"a_voice\": \"Modul Conversație vocală îți permite să vorbești cu tutorele AI în timp real. Apasă Start pentru a începe — aplicația detectează automat vocea ta prin detecția activității vocale (VAD) și tutorele răspunde cu sinteză vocală. Poți întrerupe tutorele în orice moment (barge-in). Sesiunea se încheie când se atinge limita de timp sau apeși Stop. Asigură-te că browserul are permisiunea de a accesa microfonul.\",\n \"q_listening\": \"Cum funcționează exercițiile de ascultare?\",\n \"a_listening\": \"Secțiunea Listening generează scurte fragmente audio la nivelul tău CEFR, narate de AI. Ascultă audio și răspunde la 5 întrebări de înțelegere. După trimitere, primești scorul (0–5), XP, răspunsurile corecte și transcrierea completă. Poți genera exerciții noi la cerere.\",\n \"q_reading\": \"Cum funcționează exercițiile de citire?\",\n \"a_reading\": \"Secțiunea Reading generează texte la nivelul tău CEFR — anunțuri, e-mailuri, articole, postări de blog și multe altele. Citește textul și răspunde la 5 întrebări cu variante multiple. După trimitere, primești scorul (0–5) și XP. Exerciții noi pot fi generate la cerere.\",\n \"q_providers\": \"Ce furnizori AI acceptă FreeLingo?\",\n \"a_providers_intro\": \"Configurabil în .env prin LLM_PROVIDER:\",\n \"provider_ollama\": \"Local, gratuit. Necesită Ollama pe gazdă. Model recomandat: gemma4:e4b.\",\n \"provider_openai\": \"OpenAI API (GPT-4o etc.). Rapid și fiabil. Necesită OPENAI_API_KEY.\",\n \"provider_anthropic\": \"Anthropic Claude. Necesită ANTHROPIC_API_KEY.\",\n \"provider_deepseek\": \"DeepSeek API. Necesită DEEPSEEK_API_KEY.\",\n \"q_invite\": \"Pot invita pe alții?\",\n \"a_invite\": \"Da. Prin Admin → Utilizatori, administratorul poate crea utilizatori direct sau poate genera linkuri de invitație de unică folosință care expiră după 48 de ore.\",\n \"q_password\": \"Cum îmi schimb parola sau limba maternă?\",\n \"a_password\": \"Mergi la Setări. Acolo poți actualiza numele afișat, limba maternă și parola.\",\n \"q_uiLanguage\": \"Cum schimb limba platformei?\",\n \"a_uiLanguage\": \"Mergi la Setări și găsește meniul derulant Limba platformei în secțiunea Profil. Selectează limba preferată și întreaga interfață se va schimba imediat.\",\n \"q_feedback\": \"Cum pot sugera o funcționalitate nouă sau raporta o eroare?\",\n \"a_feedback\": \"Folosește secțiunea Feedback din bara laterală. Poți crea sugestii pentru funcționalități noi sau raporta erori. Votează ideile altor utilizatori, lasă comentarii și urmărește statusul fiecărei cereri. Toate trimiterile sunt publice și sunt revizuite de administrator.\"\n },\n \"cookieBanner\": {\n \"message\": \"Folosim cookie-uri strict necesare pentru a te menține autentificat. Nu se folosesc cookie-uri de urmărire sau publicitate.\",\n \"learnMore\": \"Politică de confidentialitate\",\n \"accept\": \"Am înțeles\"\n },\n \"error\": {\n \"label\": \"Eroare neașteptată\",\n \"title\": \"Ceva a mers greșit\",\n \"body\": \"A apărut o eroare neașteptată. Poți încerca din nou sau te poți întoarce la tabloul de bord.\",\n \"retry\": \"Încearcă din nou\",\n \"dashboard\": \"Mergi la tabloul de bord\",\n \"digest\": \"Referință eroare\"\n },\n \"notFound\": {\n \"title\": \"Pagina nu a fost găsită\",\n \"body\": \"Pagina căutată nu există sau a fost mutată.\",\n \"dashboard\": \"Mergi la tabloul de bord\",\n \"home\": \"Acasă\"\n },\n \"errors\": {\n \"notFound\": \"Pagina nu a fost găsită\",\n \"serverError\": \"Ceva a mers greșit\",\n \"unauthorized\": \"Conectează-te\",\n \"backHome\": \"Înapoi acasă\"\n },\n \"conversation\": {\n \"title\": \"Conversație\",\n \"subtitle\": \"Practică vorbirii\",\n \"start\": \"Începe sesiunea\",\n \"stop\": \"Oprește\",\n \"startNew\": \"Începe o sesiune nouă\",\n \"statusLoading\": \"Se încarcă modelul vocal...\",\n \"statusReady\": \"Gata\",\n \"statusWarming\": \"Se încarcă modelele...\",\n \"statusConnecting\": \"Se conectează...\",\n \"statusListening\": \"Ascultă...\",\n \"statusDetecting\": \"Se detectează vocea...\",\n \"statusSpeaking\": \"Vorbește...\",\n \"statusError\": \"Eroare\",\n \"errorServicesDisabled\": \"Serviciile vocale nu sunt activate pe acest server.\",\n \"errorConnection\": \"Eroare de conexiune. Încearcă din nou.\",\n \"errorUnauthorized\": \"Sesiune expirată. Reîmprospătează pagina.\",\n \"errorMic\": \"Accesul la microfon a fost refuzat.\",\n \"errorVadInit\": \"Inițializarea detectării vocii a eșuat. Verifică dacă browserul tău suportă WebAssembly.\",\n \"warningTimeout\": \"Sesiunea se va încheia în {seconds}s\",\n \"sessionEnded\": \"Sesiune încheiată\",\n \"tapToStart\": \"Vorbește când ești gata\",\n \"you\": \"Tu\",\n \"assistant\": \"FreeLingo\",\n \"quotaSessions\": \"Sesiuni această săptămână\",\n \"quotaMinutes\": \"Minute azi\",\n \"quotaUnlimited\": \"Nelimitat\",\n \"quotaExceededSessions\": \"Ai folosit toate sesiunile pentru această săptămână.\",\n \"quotaExceededTime\": \"Ai folosit tot timpul zilnic de practică.\",\n \"quotaExceededTokens\": \"Ai folosit toți tokenii IA lunari.\",\n \"freemiumVoiceRemaining\": \"Voce gratuită: {remaining}/{limit} min săptămâna aceasta\",\n \"quotaTokens\": \"Tokeni luna aceasta\",\n \"memoryUpdated\": \"Memorie actualizată\",\n \"trialBanner\": \"Free assessment conversation · {minutes} min\",\n \"trialCtaLabel\": \"Keep speaking\",\n \"trialCtaTitle\": \"Continue practising with Lingu\",\n \"trialCtaDesc\": \"Unlock full voice conversations, tutor chat, listening and reading practice with Premium.\",\n \"startersHint\": \"Sau începe cu un subiect\",\n \"starters\": [\n \"Artă și creativitate\",\n \"Cărți și lectură\",\n \"Amintiri din copilărie\",\n \"Oraș vs. sat\",\n \"Gătit și rețete\",\n \"Vise și ambiții\",\n \"Familie și relații\",\n \"Modă și stil\",\n \"Filme preferate\",\n \"Festivaluri și tradiții\",\n \"Mâncare din toată lumea\",\n \"Sănătate și bunăstare\",\n \"Hobby-uri și meșteșuguri\",\n \"Învățarea limbilor\",\n \"Dobândirea de noi abilități\",\n \"Bani și buget\",\n \"Muzică și concerte\",\n \"Animale de companie\",\n \"Transport public\",\n \"Știință și spațiu\",\n \"Obiceiuri de cumpărături\",\n \"Rețele sociale\",\n \"Sport și fitness\",\n \"Tehnologie și gadgeturi\",\n \"Mediul înconjurător\",\n \"Destinații de călătorie\",\n \"Seriale TV\",\n \"Planuri de weekend\",\n \"Muncă și obiective de carieră\",\n \"Munca de acasă\"\n ]\n },\n \"voiceRecorder\": {\n \"record\": \"Înregistrează\",\n \"stop\": \"Oprește\",\n \"processing\": \"Se procesează\",\n \"error\": \"Eroare\",\n \"ariaRecord\": \"Pornește înregistrarea\",\n \"ariaStop\": \"Oprește înregistrarea\"\n },\n \"audioPlayer\": {\n \"listen\": \"Ascultă\",\n \"stop\": \"Oprește\",\n \"ariaListen\": \"Ascultă pronunția\",\n \"ariaStop\": \"Oprește audio\"\n },\n \"languages\": {\n \"en\": \"Engleză\",\n \"es\": \"Spaniolă\",\n \"fr\": \"Franceză\",\n \"pt\": \"Portugheză\",\n \"de\": \"Germană\",\n \"it\": \"Italiană\",\n \"pl\": \"Poloneză\",\n \"nl\": \"Olandeză\",\n \"ro\": \"Română\",\n \"ru\": \"Rusă\",\n \"myLanguages\": \"Limbile mele\",\n \"addLanguage\": \"Adaugă limbă\",\n \"selectLanguage\": \"Alege limba pe care vrei să o înveți\",\n \"activeLanguage\": \"Activ\",\n \"switchTo\": \"Comută la aceasta\",\n \"switching\": \"Se comută la {language}...\",\n \"switched\": \"S-a comutat la {language} ({level})\",\n \"removeLanguage\": \"Elimină limba\",\n \"removeConfirmTitle\": \"Elimini {language}?\",\n \"removeConfirmMessage\": \"Toate progresele, lecțiile, flashcardurile și conversațiile asociate acestei limbi vor fi șterse permanent. Amintirile contului vor fi păstrate. Această acțiune nu poate fi anulată.\",\n \"removeConfirmButton\": \"Elimină\",\n \"deleteError\": \"Nu s-a putut șterge {language}. Încearcă din nou.\",\n \"noLanguages\": \"Nicio limbă configurată.\",\n \"progressLabel\": \"Progres\",\n \"levelLabel\": \"Nivel\",\n \"xpLabel\": \"XP total\",\n \"streakLabel\": \"Serie\",\n \"lessonsLabel\": \"Lecții\",\n \"flashcardsLabel\": \"Flashcard-uri\",\n \"viewDetails\": \"Vezi detalii\",\n \"supportedLanguages\": \"Limbi disponibile\"\n },\n \"targetLanguages\": {\n \"en-US\": \"Engleză americană\",\n \"en-GB\": \"Engleză britanică\",\n \"es-ES\": \"Spaniolă\",\n \"it-IT\": \"Italiană\",\n \"pt-PT\": \"Portugheză\",\n \"fr-FR\": \"Franceză\",\n \"de-DE\": \"Germană\",\n \"ja-JP\": \"Japoneză\",\n \"ko-KR\": \"Coreeană\",\n \"zh-CN\": \"Chineză continentală\",\n \"en\": \"engleză\",\n \"es\": \"spaniolă\",\n \"it\": \"italiană\",\n \"pt\": \"portugheză\",\n \"fr\": \"franceză\",\n \"de\": \"germană\",\n \"ja\": \"japoneză\",\n \"ko\": \"coreeană\",\n \"zh\": \"chineză\",\n \"es-ES-description\": \"Spaniola vorbită în Spania.\",\n \"it-IT-description\": \"Italiana vorbită în Italia.\",\n \"pt-PT-description\": \"Portugheza vorbită în Portugalia.\",\n \"en-US-description\": \"Engleza vorbită în Statele Unite.\",\n \"en-GB-description\": \"Engleza vorbită în Regatul Unit.\",\n \"fr-FR-description\": \"Franceza vorbită în Franța.\",\n \"de-DE-description\": \"Germana vorbită în Germania.\",\n \"ja-JP-description\": \"Japoneza vorbită în Japonia.\",\n \"ko-KR-description\": \"Coreeana vorbită în Coreea de Sud.\",\n \"zh-CN-description\": \"Chineză mandarină din China continentală, cu caractere simplificate.\"\n },\n \"onboarding\": {\n \"title\": \"Alege-ți limba\",\n \"subtitle\": \"Ce limbă vrei să înveți?\",\n \"chooseVariant\": \"Selectează varianta\",\n \"continue\": \"Continuă\",\n \"saveFailed\": \"Salvarea preferințelor a eșuat\",\n \"goals\": {\n \"title\": \"Obiectivele tale de învățare\",\n \"subtitle\": \"Pentru ce vrei să folosești engleza? Selectează tot ce ți se potrivește.\",\n \"skip\": \"Sari\",\n \"travel\": \"Călătorii și turism\",\n \"work\": \"Muncă și carieră\",\n \"academic\": \"Studii și academic\",\n \"daily\": \"Conversație zilnică\",\n \"media\": \"Filme, muzică și seriale\",\n \"emigration\": \"A trăi în străinătate\",\n \"exams\": \"Examene și certificări\",\n \"social\": \"Socializare\"\n },\n \"trialHeadline\": \"Probă gratuită\",\n \"trialHeadlineTrialUsed\": \"Premium\",\n \"trialTitle\": \"Începe cu {days} zile gratuite\",\n \"trialTitleTrialUsed\": \"Activează FreeLingo Premium\",\n \"trialDesc\": \"Primești acces la Lingu, practică vocală, ascultare și citire înainte de prima plată.\",\n \"trialDescTrialUsed\": \"Alege un plan pentru a debloca Lingu, practica vocală, listening și reading.\",\n \"trialCtaMonthly\": \"Încearcă gratuit, apoi {price}€/lună\",\n \"trialCtaMonthlyTrialUsed\": \"Lunar flexibil · {price}€/lună\",\n \"trialCtaYearly\": \"Încearcă gratuit, apoi {price}€/an · 2 luni gratuite\",\n \"trialCtaYearlyTrialUsed\": \"Cea mai bună ofertă · {price}€/an · 2 luni gratuite\",\n \"trialSkip\": \"Continuă cu funcțiile gratuite\",\n \"trialNoCharge\": \"Fără taxă azi. Card necesar, anulează oricând.\",\n \"trialNoChargeTrialUsed\": \"Verifică suma înainte de abonare. Anulează oricând.\",\n \"trialError\": \"Plata nu a putut fi inițiată. Încearcă din nou.\",\n \"freemiumTrialTitle\": \"Perioada ta de probă gratuită a început\",\n \"freemiumTrialDesc\": \"Bucură-te de acces nelimitat la toate funcțiile timp de 7 zile. Fără card. Fă upgrade la Premium oricând din tabloul de bord.\",\n \"freemiumChatLabel\": \"Chat cu tutorele AI\",\n \"freemiumVoiceLabel\": \"Conversații vocale\",\n \"freemiumListeningLabel\": \"Exerciții de ascultare\",\n \"freemiumReadingLabel\": \"Exerciții de citire\",\n \"goToDashboard\": \"Mergi la tabloul de bord\",\n \"newLanguageHeadline\": \"Ce limbă nouă vrei să înveți?\",\n \"newLanguageSubtitle\": \"Un nou plan de studiu va fi creat pentru această limbă.\"\n },\n \"tour\": {\n \"skip\": \"Sari peste\",\n \"prev\": \"Înapoi\",\n \"next\": \"Următor\",\n \"done\": \"Să începem\",\n \"step1\": {\n \"label\": \"Bun venit\",\n \"title\": \"Bun venit la FreeLingo\",\n \"desc\": \"FreeLingo este tutorul tău de limbi străine bazat pe inteligență artificială. Exersează în ritmul tău, oricând, prin conversații, lecții și flashcard-uri inteligente.\"\n },\n \"step2\": {\n \"label\": \"Chat text\",\n \"title\": \"Discută cu tutorul tău\",\n \"desc\": \"Poartă conversații scrise cu tutorul tău IA. Pune întrebări, primește corecturi și exersează gramatică și vocabular în mod natural.\"\n },\n \"step3\": {\n \"label\": \"Voce\",\n \"title\": \"Vorbește în timp real\",\n \"desc\": \"Folosește modul de conversație vocală pentru a-ți exersa limba vorbită cu transcriere în timp real și feedback imediat despre pronunție.\"\n },\n \"step4\": {\n \"label\": \"Flashcard-uri\",\n \"title\": \"Nu uita niciun cuvânt\",\n \"desc\": \"Flashcard-urile folosesc algoritmul de repetiție spațiată SM-2 pentru a revizui cuvintele exact când ești pe cale să le uiți.\"\n },\n \"step5\": {\n \"label\": \"Plan de studiu\",\n \"title\": \"Planul tău personalizat\",\n \"desc\": \"Pe baza evaluării nivelului tău, FreeLingo creează un plan de studiu structurat cu lecții zilnice adaptate obiectivelor tale.\"\n },\n \"step6\": {\n \"label\": \"Practică\",\n \"title\": \"Ascultare & Lectură\",\n \"desc\": \"Testează-ți înțelegerea cu exerciții generate de IA. Ascultă un pasaj și răspunde la 5 întrebări, sau citește un text la nivelul tău CEFR — câștigă XP pentru fiecare răspuns corect.\"\n },\n \"step7\": {\n \"label\": \"Gata\",\n \"title\": \"Ești pregătit!\",\n \"desc\": \"Începe cu lecția de azi, deschide un chat sau exersează ascultarea și lectura — FreeLingo se adaptează modului tău de a învăța.\"\n }\n },\n \"billing\": {\n \"paywallLabel\": \"Premium necesar\",\n \"paywallTitle\": \"Deblochează FreeLingo Premium\",\n \"paywallDesc\": \"Încearcă gratuit {days} zile și deblochează toată practica Premium înainte de prima plată.\",\n \"paywallDescTrialUsed\": \"Deblochează toată practica Premium și verifică suma înainte de confirmare.\",\n \"paywallChatTitle\": \"Exersează cu Lingu fără limite\",\n \"paywallChatDesc\": \"Pune întrebări, primește corecturi și poartă conversații naturale prin text cu tutorele tău AI.\",\n \"paywallLessonsTitle\": \"Completează lecții nelimitate\",\n \"paywallLessonsDesc\": \"Gramatică, vocabular, citire și scriere — termină câte lecții dorești în fiecare zi.\",\n \"paywallConversationTitle\": \"Vorbește în timp real cu Lingu\",\n \"paywallConversationDesc\": \"Exersează conversația orală cu transcriere, răspunsuri rapide și feedback pentru mai multă fluență.\",\n \"paywallListeningTitle\": \"Antrenează-ți auzul la nivelul tău\",\n \"paywallListeningDesc\": \"Ascultă exerciții generate de AI și adaptate progresului tău, cu verificare imediată a înțelegerii.\",\n \"paywallReadingTitle\": \"Citește texte adaptate progresului tău\",\n \"paywallReadingDesc\": \"Îmbunătățește înțelegerea lecturii cu texte pe nivel, întrebări și feedback imediat.\",\n \"paywallNoCharge\": \"Fără taxă azi · card necesar · anulează oricând\",\n \"paywallNoChargeTrialUsed\": \"Plată sigură · anulează oricând\",\n \"paywallSkip\": \"Nu acum\",\n \"trialDays\": \"{days, plural, one {# zi de probă} few {# zile de probă} other {# zile de probă}}\",\n \"planMonthly\": \"Lunar flexibil · {price}€/lună →\",\n \"planYearly\": \"Cea mai bună ofertă · {price}€/an · 2 luni gratuite →\",\n \"checkoutError\": \"Nu s-a putut iniția plata. Încearcă din nou.\",\n \"pricingTitle\": \"Preț simplu și transparent\",\n \"pricingDesc\": \"{days} zile gratuite · fără taxă azi · anulează oricând\",\n \"pricingDescTrialUsed\": \"Alege lunar sau anual · anulează oricând\",\n \"planMonthlyName\": \"Lunar\",\n \"planYearlyName\": \"Anual\",\n \"bestValue\": \"Cea mai bună ofertă\",\n \"month\": \"lună\",\n \"year\": \"an\",\n \"planFeature\": {\n \"feature1\": \"Acces nelimitat — fără limite zilnice sau săptămânale\",\n \"feature2\": \"2 luni gratuite\"\n },\n \"planFreeName\": \"Gratuit\",\n \"trialBadge\": \"Probă gratuită\",\n \"trialBadgeTrialUsed\": \"Premium\",\n \"ctaRegister\": \"Începe proba gratuită\",\n \"ctaRegisterTrialUsed\": \"Alege planul\",\n \"freeFeature\": {\n \"f1\": \"Test de nivel & evaluare\",\n \"f2\": \"Lecții & plan de studiu\",\n \"f3\": \"Gramatică & vocabular\",\n \"f4\": \"Panou de control & urmărire progres\",\n \"f5\": \"Flashcard-uri & repetiție spațiată\",\n \"l1\": \"Chat cu tutorele AI\",\n \"l2\": \"Conversații vocale\",\n \"l3\": \"Exerciții de ascultare\",\n \"l4\": \"Exerciții de citire\",\n \"l5\": \"Probă completă de 7 zile\"\n },\n \"successLabel\": \"Plată confirmată\",\n \"successTitle\": \"Bun venit la FreeLingo Premium!\",\n \"successDesc\": \"Abonamentul tău este acum activ. Bucură-te de acces nelimitat la toate funcțiile.\",\n \"successCheckingLabel\": \"Se confirmă abonamentul\",\n \"successCheckingTitle\": \"Verificăm abonamentul\",\n \"successCheckingDesc\": \"De obicei durează câteva secunde.\",\n \"successPendingLabel\": \"Aproape gata\",\n \"successPendingTitle\": \"Abonamentul tău este în curs de confirmare\",\n \"successPendingDesc\": \"Accesul Premium ar trebui să fie disponibil în curând. Dacă nu apare, verifică setările de facturare.\",\n \"successErrorLabel\": \"Confirmare în așteptare\",\n \"successErrorTitle\": \"Nu am putut verifica încă abonamentul\",\n \"successErrorDesc\": \"Mergi la tabloul de bord și reîmprospătează în curând sau verifică setările de facturare.\",\n \"successRedirect\": \"Redirecționare spre tabloul de bord în {seconds}s...\",\n \"successCta\": \"Mergi la tabloul de bord\",\n \"canceledLabel\": \"Plată anulată\",\n \"canceledTitle\": \"Nu a fost efectuată nicio taxă\",\n \"canceledDesc\": \"Nu a fost efectuată nicio taxă. Progresul tău este în siguranță și poți alege un plan mai târziu din setări.\",\n \"canceledCtaDashboard\": \"Mergi la tabloul de bord\",\n \"canceledCtaSettings\": \"Vezi planurile\",\n \"canceledNoCharge\": \"Nu a fost efectuată nicio taxă în această sesiune · alege un plan oricând\",\n \"section\": \"Abonament\",\n \"status\": \"Status\",\n \"statusActive\": \"Activ\",\n \"statusCanceling\": \"Se anulează\",\n \"statusCanceled\": \"Anulat\",\n \"statusTrialing\": \"Perioadă de probă\",\n \"statusPastDue\": \"Plată restantă\",\n \"statusUnpaid\": \"Neplătit\",\n \"statusPaused\": \"Pauzat\",\n \"statusIncomplete\": \"Plată în așteptare\",\n \"statusIncompleteExpired\": \"Plată expirată\",\n \"statusNone\": \"Fără abonament\",\n \"nextBilling\": \"Următoarea facturare\",\n \"accessUntil\": \"Acces până la\",\n \"manage\": \"Gestionează abonamentul\",\n \"updatePayment\": \"Actualizează plata\",\n \"pastDueTitle\": \"Plată în așteptare\",\n \"pastDueDesc\": \"Actualizează metoda de plată pentru a restabili accesul Premium.\",\n \"subscribe\": \"Abonează-te\",\n \"portalError\": \"Nu s-a putut deschide portalul de facturare. Încearcă din nou.\",\n \"openSourceTitle\": \"Sursă deschisă\",\n \"openSourceDesc\": \"Găzduieşte-l gratuit pe propriul server\",\n \"openSourceCta\": \"Vezi pe GitHub\",\n \"planFreeBadge\": \"Gratuit pentru totdeauna\",\n \"priceAmount\": \"{amount} lei\",\n \"pricePerPeriod\": \" lei/{period}\",\n \"priceOriginal\": \"{price} lei / {period}\",\n \"planFreeDesc\": \"Probă completă de 7 zile, apoi gratuit cu limite zilnice și săptămânale\",\n \"planFreeCta\": \"Începe\",\n \"limitedLabel\": \"Limitat\"\n },\n \"freemium\": {\n \"chatLabel\": \"Chat\",\n \"lessonsLabel\": \"Lecții\",\n \"listeningLabel\": \"Ascultare\",\n \"readingLabel\": \"Citire\",\n \"voiceLabel\": \"Voce (min)\",\n \"freeLimit\": \"Obține Premium\",\n \"trialDaysLeft\": \"{days, plural, one {# zi de probă gratuită} other {# zile de probă gratuită}}\",\n \"trialUnlimited\": \"Acces nelimitat\",\n \"requiresSubscription\": \"Doar Premium\"\n },\n \"whatsNew\": {\n \"title\": \"Noutăți\",\n \"version\": \"v1.8.30\",\n \"cta\": \"Am înțeles\",\n \"entry1\": {\n \"label\": \"Amintiri care te însoțesc\",\n \"desc\": \"Lingu poate acum să rețină detalii utile în toate limbile pe care le studiezi, atât în chat, cât și în conversațiile vocale.\"\n },\n \"entry2\": {\n \"label\": \"Tu deții controlul\",\n \"desc\": \"Adaugă propriile amintiri sau consultă-le, șterge-le și golește-le oricând din Setări. Eliminarea unei limbi îți păstrează amintirile.\"\n },\n \"entry3\": {\n \"label\": \"Lecțiile tale, mereu accesibile\",\n \"desc\": \"În Planul meu poți începe lecția curentă, continua lecțiile omise sau revizui lecțiile finalizate cu răspunsurile și feedbackul salvate.\"\n },\n \"entry4\": {\n \"label\": \"O experiență mai fluidă\",\n \"desc\": \"Remedierile de erori și micile îmbunătățiri fac FreeLingo mai stabil și mai plăcut de utilizat.\"\n }\n },\n \"contact\": {\n \"title\": \"Contact\",\n \"labelEmail\": \"E-mail\",\n \"placeholderEmail\": \"al_tau@email.com\",\n \"labelSubject\": \"Subiect\",\n \"placeholderSubject\": \"Scurtă descriere a întrebării tale\",\n \"labelDescription\": \"Mesaj\",\n \"placeholderDescription\": \"Descrie întrebarea sau feedback-ul tău...\",\n \"send\": \"Trimite\",\n \"sending\": \"Se trimite...\",\n \"sent\": \"Mesaj trimis\",\n \"errorGeneric\": \"Trimiterea a eșuat. Te rog încearcă din nou.\"\n },\n \"listening\": {\n \"title\": \"Ascultare\",\n \"topic\": \"Subiect\",\n \"listenLabel\": \"Ascultă\",\n \"questionsLabel\": \"Întrebări\",\n \"submit\": \"Trimite răspunsurile\",\n \"generating\": \"Se generează exercițiul...\",\n \"generatingDesc\": \"AI creează un exercițiu nou. Durează aproximativ 30 de secunde.\",\n \"generatingLong\": \"Durează mai mult decât de obicei...\",\n \"noExercises\": \"Nu există exerciții disponibile pentru nivelul tău.\",\n \"generate\": \"Generează exercițiu\",\n \"audioError\": \"Imposibil de încărcat audio\",\n \"alreadyAttempted\": \"Ai completat deja acest exercițiu.\",\n \"errorLoading\": \"Nu s-a putut încărca exercițiul. Încearcă din nou.\",\n \"errorSubmit\": \"Nu s-au putut trimite răspunsurile. Încearcă din nou.\",\n \"resultsLabel\": \"Rezultate\",\n \"transcript\": \"Transcriere\",\n \"review\": \"Revizuire răspunsuri\",\n \"nextExercise\": \"Exercițiul următor\",\n \"viewHistory\": \"Istoric\",\n \"history\": \"Istoric\",\n \"historyTitle\": \"Istoric listening\",\n \"historyEmpty\": \"Nu există exerciții finalizate încă.\",\n \"practiceMore\": \"Practică\",\n \"moreInHistory\": \"+{count} mai multe\",\n \"practiceAgain\": \"Exersează din nou\",\n \"replayNoXp\": \"Repetare (fără XP)\"\n },\n \"reading\": {\n \"title\": \"Lectură\",\n \"topic\": \"Subiect\",\n \"textLabel\": \"Text\",\n \"questionsLabel\": \"Întriebări\",\n \"submit\": \"Trimite răspunsurile\",\n \"generating\": \"Se generează exercițiul...\",\n \"generatingDesc\": \"AI creează un exercițiu nou. Durează aproximativ 30 de secunde.\",\n \"generatingLong\": \"Durează mai mult decât de obicei...\",\n \"noExercises\": \"Nu există exerciții disponibile pentru nivelul tău.\",\n \"generate\": \"Generează exercițiu\",\n \"alreadyAttempted\": \"Ai completat deja acest exercițiu.\",\n \"errorLoading\": \"Nu s-a putut încărca exercițiul. Încarcă din nou.\",\n \"errorSubmit\": \"Nu s-au putut trimite răspunsurile. Încarcă din nou.\",\n \"resultsLabel\": \"Rezultate\",\n \"review\": \"Revizuire răspunsuri\",\n \"nextExercise\": \"Exercițiul următor\",\n \"viewHistory\": \"Istoric\",\n \"history\": \"Istoric\",\n \"historyTitle\": \"Istoric lectură\",\n \"historyEmpty\": \"Nu există exerciții finalizate êncă.\",\n \"practiceMore\": \"Exersează\",\n \"moreInHistory\": \"+{count} mai multe\",\n \"practiceAgain\": \"Exersează din nou\",\n \"replayNoXp\": \"Reluare (fără XP)\",\n \"selectWordHint\": \"Selectează un cuvânt pentru a-l salva în vocabularul tău\"\n },\n \"feedback\": {\n \"title\": \"Feedback\",\n \"subtitle\": \"Sugestii și rapoarte de erori\",\n \"tabFeatures\": \"Sugestii\",\n \"tabBugs\": \"Erori\",\n \"newFeature\": \"+ Sugestie nouă\",\n \"newBug\": \"+ Raportează o eroare\",\n \"sortBy\": \"Sortează după\",\n \"sortVotes\": \"Cele mai votate\",\n \"sortDate\": \"Cele mai recente\",\n \"filterStatus\": \"Stare\",\n \"filterAll\": \"Toate\",\n \"noEntries\": \"Nimic aici încă. Fii primul care trimite ceva!\",\n \"votes\": \"{count} voturi\",\n \"vote\": \"1 vot\",\n \"comments\": \"{count} comentarii\",\n \"comment\": \"1 comentariu\",\n \"by\": \"de\",\n \"statusPending\": \"În așteptare\",\n \"statusPlanned\": \"Planificat\",\n \"statusInProgress\": \"În progres\",\n \"statusDone\": \"Finalizat\",\n \"statusDeclined\": \"Respins\",\n \"unread\": \"Necitit\",\n \"modalCreateTitleFeature\": \"Sugestie nouă\",\n \"modalCreateTitleBug\": \"Raportează o eroare\",\n \"labelTitle\": \"Titlu\",\n \"placeholderTitleFeature\": \"Descrie sugestia ta într-o propoziție\",\n \"placeholderTitleBug\": \"Descriere scurtă a erorii\",\n \"labelDescription\": \"Detalii\",\n \"placeholderDescriptionFeature\": \"Explică funcționalitatea și de ce ar fi utilă\",\n \"placeholderDescriptionBug\": \"Pași pentru reproducere, comportament așteptat, ce s-a întâmplat\",\n \"submit\": \"Trimite\",\n \"submitting\": \"Se trimite...\",\n \"cancel\": \"Anulează\",\n \"deleteEntry\": \"Șterge\",\n \"deleteEntryConfirmTitle\": \"Șterge intrarea\",\n \"deleteEntryConfirmMessage\": \"Ștergi această intrare? Acțiunea nu poate fi anulată.\",\n \"deleteEntryConfirm\": \"Șterge\",\n \"addComment\": \"Adaugă un comentariu\",\n \"commentPlaceholder\": \"Scrie un comentariu...\",\n \"postComment\": \"Publică\",\n \"postingComment\": \"Se publică...\",\n \"deleteComment\": \"Șterge\",\n \"deleteCommentConfirmTitle\": \"Șterge comentariul\",\n \"deleteCommentConfirmMessage\": \"Ștergi acest comentariu?\",\n \"deleteCommentConfirm\": \"Șterge\",\n \"loading\": \"Se încarcă...\",\n \"backToList\": \"← Înapoi\",\n \"errorLoad\": \"Încărcare eșuată. Încearcă din nou.\",\n \"errorSubmit\": \"Trimitere eșuată. Încearcă din nou.\",\n \"prevPage\": \"← Prev.\",\n \"nextPage\": \"Urm. →\"\n },\n \"reviewPrompt\": {\n \"statusError\": \"Nu am putut verifica starea recenziei tale. Încearcă din nou mai târziu.\",\n \"ratingRequiredError\": \"Alege un rating înainte de trimitere.\",\n \"saveError\": \"Nu am putut salva recenzia. Încearcă din nou.\",\n \"eyebrow\": \"Evaluează FreeLingo\",\n \"title\": \"Cum a fost experiența ta?\",\n \"closeLabel\": \"Închide solicitarea de recenzie\",\n \"checking\": \"Se verifică starea recenziei...\",\n \"ratingLabel\": \"Rating obligatoriu\",\n \"ratingGroupLabel\": \"Rating\",\n \"star\": \"stea\",\n \"stars\": \"stele\",\n \"commentLabel\": \"Comentariu opțional\",\n \"commentPlaceholder\": \"Spune-ne ce te-a ajutat să înveți.\",\n \"cancel\": \"Anulează\",\n \"submit\": \"Trimite\"\n },\n \"landingReviews\": {\n \"eyebrow\": \"Povești de la cursanți\",\n \"title\": \"Învățarea se vede mai bine când o povestești tu\",\n \"subtitle\": \"Recenzii de la studenți care exersează deja cu Lingu pe FreeLingo.\",\n \"averageLabel\": \"{average}/5 · {count, plural, one {# recenzie în total} few {# recenzii în total} other {# recenzii în total}}\",\n \"learningLanguage\": \"Învață {language}\",\n \"starsLabel\": \"{rating} din 5 stele\",\n \"ratingOnly\": \"Rating FreeLingo verificat.\"\n },\n \"adminReviews\": {\n \"title\": \"Recenzii\",\n \"eyebrow\": \"Admin\",\n \"totalFiltered\": \"Total filtrat\",\n \"approvedOnPage\": \"Aprobate pe pagină\",\n \"pendingOnPage\": \"În așteptare pe pagină\",\n \"filters\": \"Filtre\",\n \"approvalFilter\": \"Filtru de aprobare\",\n \"allReviews\": \"Toate recenziile\",\n \"pending\": \"În așteptare\",\n \"approved\": \"Aprobată\",\n \"ratingFilter\": \"Filtru rating\",\n \"allRatings\": \"Toate ratingurile\",\n \"starsOption\": \"{rating} stele\",\n \"clear\": \"Șterge\",\n \"loadError\": \"Nu s-au putut încărca recenziile.\",\n \"updateError\": \"Nu s-a putut actualiza recenzia.\",\n \"deleteError\": \"Nu s-a putut șterge recenzia.\",\n \"loading\": \"Se încarcă recenziile...\",\n \"queue\": \"Coadă de recenzii\",\n \"total\": \"{total} în total\",\n \"empty\": \"Nu s-au găsit recenzii.\",\n \"starsLabel\": \"{rating} stele\",\n \"learningLanguage\": \"Învață {language}\",\n \"ratingOnly\": \"Recenzie doar cu rating.\",\n \"unapprove\": \"Retrage aprobarea\",\n \"approve\": \"Aprobă\",\n \"delete\": \"Șterge\",\n \"prev\": \"Anterior\",\n \"next\": \"Următorul\",\n \"deleteTitle\": \"Șterge recenzia\",\n \"deleteMessage\": \"Ștergi această recenzie? Această acțiune nu poate fi anulată.\"\n },\n \"maintenance\": {\n \"label\": \"Întreținere\",\n \"title\": \"În mentenanță\",\n \"description\": \"Această secțiune este temporar indisponibilă pentru lucrări de întreținere. Încearcă din nou mai târziu.\"\n }\n}"}}}}